authorgravatar for ntrel@noreply.codeberg.orgntrel <ntrel@noreply.codeberg.org> 2026-10-11 19:02:13+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-10-11 19:02:13+02:00
log6b5a35e4ff3d2a18eb21be4656eeaa6812e223f1
tree7d204e863148c6b27f8350476da03a9cdfd69512
parent9276a56e3cee12a067f93d719a5e7f2762dd4603

Update doc/langref/test_for.zig (#37181)

Use -1 element instead of 0, as 0 wouldn't affect sum. Fix 'reslice' wording as example is an array, not a slice. Increase slice length to 2 to demonstrate feature better. Split out "for ranges" test from basics with shorter array. Use usize sum to avoid cast. Improve comments. Reuse sum vars. Reviewed-on: https://codeberg.org/ziglang/zig/pulls/37181 Reviewed-by: Andrew Kelley <andrew@ziglang.org>

1 files changed, 24 insertions(+), 18 deletions(-)

doc/langref/test_for.zig+24-18
......@@ -1,41 +1,47 @@
11const expectEqual = @import("std").testing.expectEqual;
22
33test "for basics" {
4 const items = [_]i32{ 4, 5, 3, 4, 0 };
4 const items = [_]i32{ 4, 5, 3, -1, 4 };
55 var sum: i32 = 0;
66
77 // For loops iterate over slices and arrays.
88 for (items) |value| {
99 // Break and continue are supported.
10 if (value == 0) {
10 if (value < 0) {
1111 continue;
1212 }
1313 sum += value;
1414 }
1515 try expectEqual(16, sum);
1616
17 // To iterate over a portion of a slice, reslice.
18 for (items[0..1]) |value| {
17 // Use slicing to iterate over a portion of a slice or array.
18 sum = 0;
19 for (items[0..2]) |value| {
1920 sum += value;
2021 }
21 try expectEqual(20, sum);
22 try expectEqual(9, sum);
23}
24
25test "for ranges" {
26 const items = [_]u8{1, 2, 3};
27 var sum: usize = 0;
2228
23 // To access the index of iteration, specify a second condition as well
24 // as a second capture value.
25 var sum2: i32 = 0;
26 for (items, 0..) |_, i| {
29 // To access the index of iteration, specify an unbounded range as the
30 // second condition, as well as a second capture value.
31 for (items, 0..) |e, i| {
2732 try expectEqual(usize, @TypeOf(i));
28 sum2 += @as(i32, @intCast(i));
33 sum += i;
34 try expectEqual(e, i + 1);
2935 }
30 try expectEqual(10, sum2);
36 try expectEqual(3, sum); // 0 + 1 + 2
3137
32 // To iterate over consecutive integers, use the range syntax.
33 // Unbounded range is always a compile error.
34 var sum3: usize = 0;
38 // To iterate over consecutive integers, use bounded range syntax.
39 // A lone unbounded range is a compile error.
40 sum = 0;
3541 for (0..5) |i| {
36 sum3 += i;
42 sum += i;
3743 }
38 try expectEqual(10, sum3);
44 try expectEqual(10, sum);
3945}
4046
4147test "multi object for" {
......@@ -44,8 +50,8 @@ test "multi object for" {
4450 var count: usize = 0;
4551
4652 // Iterate over multiple objects.
47 // All lengths must be equal at the start of the loop, otherwise detectable
48 // illegal behavior occurs.
53 // All bounded objects must have equal lengths.
54 // There must be at least one bounded object.
4955 for (items, items2) |i, j| {
5056 count += i + j;
5157 }