控制流¶
if / else if / else¶
let score = 85;
if score >= 90 {
println("优秀");
} else if score >= 80 {
println("良好");
} else if score >= 60 {
println("及格");
} else {
println("不及格");
}
if 表达式¶
if 也可以作为表达式使用,必须有 else 分支:
类型一致
if 表达式的两个分支必须返回相同类型,否则报错。
while 循环¶
配合 break / continue¶
let i = 0;
while true {
if i >= 10 { break; }
i = i + 1;
if i % 2 == 0 { continue; }
println("奇数:", i);
}
for 循环¶
for 是范围式循环,左闭右开 [start, end):
配合 break / continue¶
loop 无限循环¶
loop 等同于 while true,必须用 break 退出:
break¶
立即跳出最近的 while / for / loop 循环:
continue¶
跳过本次循环体剩余部分,进入下一次迭代:
return¶
从函数返回。可带值,也可不带(返回 none):
fn is_adult(age: i32) -> bool {
return age >= 18;
}
fn greet() {
println("hi");
return; // 等价于 return none;
}
fn early_exit(x: i32) -> i32 {
if x < 0 { return -1; }
if x == 0 { return 0; }
x * 2
}
隐式返回
函数最后一条表达式的值会作为隐式返回值。return 用于提前退出。
fn double(x: i32) -> i32 {
x * 2 // 隐式返回
}
fn explicit_double(x: i32) -> i32 {
return x * 2; // 显式返回
}
嵌套循环¶
break 只跳出最近一层¶
v0.1 限制
v0.1 暂不支持带标签的 break 'outer / continue 'outer。后续版本会加入。
综合示例¶
FizzBuzz¶
for n in 1..16 {
if n % 15 == 0 {
println("FizzBuzz");
} else if n % 3 == 0 {
println("Fizz");
} else if n % 5 == 0 {
println("Buzz");
} else {
println(n);
}
}
二分查找¶
fn binary_search(nums: list, target: i32) -> i32 {
let lo = 0;
let hi = len(nums);
while lo < hi {
let mid = (lo + hi) / 2;
if nums[mid] == target {
return mid;
} else if nums[mid] < target {
lo = mid + 1;
} else {
hi = mid;
}
}
return -1;
}
let arr = [1, 3, 5, 7, 9, 11, 13];
let idx = binary_search(arr, 7);
println("找到索引:", idx); // 3