mirror of
https://codeberg.org/andyscott/ziglings.git
synced 2024-11-09 11:40:46 -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",
|
||||
.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.
|
||||
|
|
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