Rust 易混淆忘记的基本语法
一个称呼
Rustaceans
可以理解为对 rust 支持的那部分人群,可以看这段英文:
Rustaceans are people who use Rust, contribute to Rust, or are interested in the development of Rust.
直译过来就是:
Rustaceans 是使用、推进、完善、对 rust 感兴趣的人。
当你使用Rust时,那么你也是其中一员。
命名
Rust 代码中的函数和变量名使用 snake case 规范风格,所有字母都是小写并使用下划线分隔单词:another_function
.
表达式 和 语句 的区别
Rust 是一门基于表达式(expression-based)的语言,表达式(Expressions)计算并产生一个值,与你见过的大部分代码行不同, 表达式的结尾没有分号,如果在表达式的结尾加上分号,它就变成了语句。
// 这一个表达式,一个代码块,它的值是 4
{
let x = 3; // 语句
x + 1 // 表达式
}
语句(Statements)是执行一些操作,但不返回值的指令,如:let x = (let y = 6)
会报错,与其他语言不同,例如 C 和 Ruby,它们的赋值语句会返回所赋的值,
这些语言中,可以这么写x = y = 6
,这样 x 和 y 的值都是 6;
Rust 中不能这样写,let y = 6 语句并不返回值,所以没有可以绑定到 x 上的值。
函数
用 ->
指明返回类型,不是 :
fn five() -> i32 {
5
}
函数的返回值等同于函数体最后一个表达式的值, 使用 return
关键字和指定值,可从函数中提前返回,大部分函数隐式的返回最后的表达式, 因此可以省略 return
.
流程控制
Rust 代码中最常见的用来控制执行流的结构是 if
表达式和循环,有三种循环:loop
、while
和 for
.
if 表达式
if
是表达式,和其他语言的 if
不一样
let num = 1;
// if 和 else 分支的值类型要一样
// 不然会报错。
let a = if num > 0 {'T'} else {'F'};
上面 rust 代码,直接把 if
表达式的值赋值给了 a
。
if
的条件 必须 是 bool
值。如果条件不是 bool
值, 就会报错。
这点让我想到了 PHP
if
的痛, PHP 里面的if
会让一个问题,变成N个问题,比如,在 PHPif
条件里面用了empty
判断某个值,那么当值是 数组、数字0、空字符串、’0’…会返回什么?痛意涌上心头。
if 的妙用:
- 当值在某个
option
枚举时,可以用它获取存在值的逻辑:... // 这里需要 let Some ,而不是直接使用 Some. if let Some(data) = other_option { println!("{:?}", data); } ...
- 当值在某个
Result
枚举时,同理:
这种用法熟悉后,写逻辑代码就非常流畅.... if let Ok(data) = other_option { println!("{:?}", data); } ...
循环标签
用于在多个循环之间消除歧义,默认 break
和 continue
应用于此时最内层的循环, 用循环标签可以指定 break
和 continue
生效的地方。
'out_side: loop {
let mut num = 0;
println!("begin");
loop {
num += 1;
if num == 5 {
println!("break to out_side");
break 'out_side;
} else if num > 10 {
break;
} else { continue; }
}
break;
}
易忘记是打标签的语法,前面要有个单引号:
'out_side: loop {
...
}
for
易混淆的是语法
let a = [10, 20, 30, 40, 50];
for element in a {
println!("the value is: {element}");
}
本作品采用《CC 协议》,转载必须注明作者和本文链接