本文简单比较了 Rust 与 JavaScript 在控制流的差异:
-
if
-
循环控制流:
for
、while
等
if
Rust 示例
fn main() {
let number = 3;
if number < 5 {
println!("condition was true");
} else {
println!("condition was false");
}
}
JavaScript 示例
const main = () => {
let number = 3;
if (number < 5) {
console.log("condition was true");
} else {
console.log("condition was false");
}
};
不同点
-
Rust 中的
if
的条件必须是bool
值,不像 Ruby 或 JavaScript 这样的语言,Rust 并不会尝试自动地将非布尔值转换为布尔值。必须总是显式地使用布尔值作为if
的条件。 -
Rust 中的
if
是表达式。如下是一个示例:
fn main() {
let number = 3;
let result = if number < 5 {
"condition was true"
} else {
"condition was false"
};
println!("{}", result);
}
- JavaScript 中
if
的条件必须由括号包裹。
循环
for
Rust 示例
fn main() {
let a = [10, 20, 30, 40, 50];
for element in a {
println!("the value is: {element}");
}
}
JavaScript 示例
const main = () => {
let a = [10, 20, 30, 40, 50];
for (const element of a) {
console.log(`the value is: ${element}`);
}
};
不同点:
-
Rust 中的
for
是表达式。 -
JavaScript 中的
for..of
语句,必须由括号包裹
while
Rust 示例:
fn main() {
let mut number = 3;
while number != 0 {
println!("{number}!");
number -= 1;
}
println!("LIFTOFF!!!");
}
JavaScript 示例:
const main = () => {
let number = 3;
while (number != 0) {
console.log(`${number}!`);
number -= 1;
}
console.log("LIFTOFF!");
};
不同点:
-
Rust 中的
while
是表达式。 -
JavaScript 中
while
的条件必须由括号包裹。
loop
Rust 示例
fn main() {
let mut counter = 0;
loop {
counter += 1;
if counter == 10 {
break;
}
}
}
同时 loop
是表达式,支持从循环返回值:
fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2;
}
};
println!("{}", result);
}
JavaScript 示例
JavaScript 中并没有 loop
,不过可以使用 while
实现逻辑相同的代码,示例如下:
const main = () => {
let counter = 0;
while (true) {
counter += 1;
if (counter == 10) {
break;
}
}
};
循环标签
如果存在嵌套循环,break
和 continue
应用于此时最内层的循环。我们可以选择在一个循环上指定一个 循环标签,然后将标签与 break
或 continue
一起使用,使这些关键字应用于已标记的循环而不是最内层的循环。
Rust 示例
fn main() {
let mut count = 0;
'counting_up: loop {
println!("count = {count}");
let mut remaining = 10;
loop {
println!("remaining = {remaining}");
if remaining == 9 {
break;
}
if count == 2 {
break 'counting_up;
}
remaining -= 1;
}
count += 1;
}
println!("End count = {count}");
}
JavaScript 示例
const main = () => {
let count = 0;
counting_up: while (true) {
console.log(`count = ${count}`);
let remaining = 10;
while (true) {
console.log(`remaining = ${remaining}`);
if (remaining == 9) {
break;
}
if (count == 2) {
break counting_up;
}
remaining -= 1;
}
count += 1;
}
console.log(`End count = ${count}`);
};
main();
不同点:
- Rust 中循环标签前有一个反引号,而 JavaScript 中没有。
总结
Rust 和 JavaScript 在控制流的主要差异:
-
Rust 中的控制流为表达式。
-
JavaScript 中控制流的条件表达式必须用括号包裹。