mirror of
https://codeberg.org/andyscott/ziglings.git
synced 2024-12-22 14:03:10 -05:00
added ex062 loop expressions
This commit is contained in:
parent
96f5b425e3
commit
e608e41cc7
3 changed files with 61 additions and 0 deletions
|
@ -314,6 +314,10 @@ const exercises = [_]Exercise{
|
||||||
.main_file = "061_coercions.zig",
|
.main_file = "061_coercions.zig",
|
||||||
.output = "Letter: A",
|
.output = "Letter: A",
|
||||||
},
|
},
|
||||||
|
.{
|
||||||
|
.main_file = "062_loop_expressions.zig",
|
||||||
|
.output = "Current language: Zig",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Check the zig version to make sure it can compile the examples properly.
|
/// Check the zig version to make sure it can compile the examples properly.
|
||||||
|
|
53
exercises/062_loop_expressions.zig
Normal file
53
exercises/062_loop_expressions.zig
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
//
|
||||||
|
// Remember using if/else statements as expressions like this?
|
||||||
|
//
|
||||||
|
// var foo: u8 = if (true) 5 else 0;
|
||||||
|
//
|
||||||
|
// Zig also lets you use for and while loops as expressions.
|
||||||
|
//
|
||||||
|
// Like 'return' for functions, you can return a value from a
|
||||||
|
// loop block with break:
|
||||||
|
//
|
||||||
|
// break true; // return boolean value from block
|
||||||
|
//
|
||||||
|
// But what value is returned from a loop if a break statement is
|
||||||
|
// never reached? We need a default expression. Thankfully, Zig
|
||||||
|
// loops also have 'else' clauses! As you might have guessed, the
|
||||||
|
// else clause is evaluated once a while condition becomes false
|
||||||
|
// or a for loop runs out of items.
|
||||||
|
//
|
||||||
|
// const two: u8 = while (true) break 2 else 0; // 2
|
||||||
|
// const three: u8 = for ([1]u8{1}) |f| break 3 else 0; // 3
|
||||||
|
//
|
||||||
|
// If you do not provide an else clause, an empty one will be
|
||||||
|
// provided for you, which will evaluate to the void type, which
|
||||||
|
// is probably not what you want. So consider the else clause
|
||||||
|
// essential when using loops as expressions.
|
||||||
|
//
|
||||||
|
// With that in mind, see if you can fix the problem with this
|
||||||
|
// program.
|
||||||
|
//
|
||||||
|
const print = @import("std").debug.print;
|
||||||
|
|
||||||
|
pub fn main() void {
|
||||||
|
const langs: [6][]const u8 = .{
|
||||||
|
"Erlang",
|
||||||
|
"Algol",
|
||||||
|
"C",
|
||||||
|
"OCaml",
|
||||||
|
"Zig",
|
||||||
|
"Prolog",
|
||||||
|
};
|
||||||
|
|
||||||
|
// Let's find the first language with a three-letter name and
|
||||||
|
// return it from the for loop.
|
||||||
|
const current_lang: ?[]const u8 = for (langs) |lang| {
|
||||||
|
if (lang.len == 3) break lang;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (current_lang) |cl| {
|
||||||
|
print("Current language: {s}\n", .{cl});
|
||||||
|
} else {
|
||||||
|
print("Did not find a three-letter language name. :-(\n", .{});
|
||||||
|
}
|
||||||
|
}
|
4
patches/patches/062_loop_expressions.patch
Normal file
4
patches/patches/062_loop_expressions.patch
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
46c46
|
||||||
|
< };
|
||||||
|
---
|
||||||
|
> } else null;
|
Loading…
Reference in a new issue