Rust 语言中的瑕疵 - 省去 return
2017-11-07 20:55 rust
Rust 语法中的 return
关键字是可以省去的, 这也是推荐做法,
但是某些条件下会带来问题.
先看例子:
fn max(a: i32, b: i32) -> i32 {
if a > b {
a
} else {
b
}
}
这里, a
以及 b
都作为表达式, 直接返回它们的值. 这种写法对于简洁的函数, 倒还可以接受,
如果内部有多层嵌套的话, 就很容易多加一个分号, 就像这样: a;
, 尽管这里编译器会报一条警告,
但并不是所有时候都会如此, 再看下面的例子:
fn max_plus_one(a: i32, b: i32) -> i32 {
if a > b {
1 + a;
}
b + 1
}
fn main() {
println!("{}", max_plus_one(2, 1));
}
以上代码, 编译器甚至连条警告信息都没有打印.
省去 return
以及 ;
, 并不能省去多少体力, 相反地, 让代码有了更多出错的机会. 除此之外,
这种写法也与一般的语言里面有差别, 在编写以及阅读代码时, 都要多留个心眼, 会在这些不起眼的
细节上花功夫. 上面的代码还只是少量的几行, 如果嵌的层次多了, 读代码时就得上下来回地翻找了,
远不如 return xxx;
来得更显眼.
当然, 对于 let-if
语句, 或许有些用武之地:
fn main() {
let condition = true;
let number = if condition {
5
} else {
6
};
println!("The value of number is: {}", number);
}
但是, 如果按照旧的方式来写:
fn main() {
let condition = true;
let number;
if condition {
number = 5;
} else {
number = 6;
}
println!("The value of number is: {}", number);
}
差异并不大, 而且如果 if
语句里面逻辑复杂一些的话, let-if
这种写法的可读性跟上面的函数一样是很差的.
另外, let-if
语句后面的 ;
要记得加上 :)