本文面向有一定编程基础的同学
Rust 基本数据类型(标量)大的来说分为整型,浮点型,字符型,布尔型。
整型中分为按照是否有符号位分为有符号整型和无符号整型,按位数分为8位,16位,32位,64位。两者结合产生8种整型数据类型,及有符号的:i8
, i16
, i32
, i64
,以及无符号的:u8
, u16
, u32
, u64
,同时还有 isize
,和 usize
两种依据操作系统架构而定的两种类型,及在 32位操作系统中为 i32
和 u32
,在64位操作系统中为 i64
和 u64
(可对比Golang 中的int
类型)。
浮点型则只有 f32
和 f64
两种类型,同样只有两种类型的还有布尔类型,只有 false
和 true
,不做赘述。
字符型则是使用单引号包裹的单个字符,关于字符型,我们会在以后有机会深入探讨,此处先按下不表。
对于数值型 Rust 允许在数值末尾添加具体数据类型作为标识如 789u8 就标识值为 789的无符号8位整数(显然已经超出范围)。
Rust基本数据类型中的复合数据类型包括元组和数组。
数组与其他语言基本相似:
let arr = [1,2,3,33]; arr[0];
元组与数组的概念基本相似,不同点在于
let tup = (1,2,3,"$"); tup.0;
Rust 通过 let
关键字定义变量比如下面这样:
let i = 100;
也可以在声明的时候指定变量的数据类型
let i: i32 = 100;
如果不在申明的时候指定数据类型,则编译器会通过赋值来进行类型推断。比较特殊的是元组和数组的指定数据类型方式如下:
// 在方括号中第一个位置表示元素数据类型,第二个位置表述元素个数 let arr:[u8; 4] = [1,2,3,33]; // 元组则是依次指定所有元素的数据类型 let tup:(u8,u8,u8,&str) = (1,2,3,"$");
控制流无外乎就是分支和循环。
Rust 的分支有:if
,match
。即便不用说明你也应该能猜到既然支持 if 那么对于 if-else
, if-else-if
这样的结构自然也是支持的,在写法上与其他语言(如Golang)也基本一样,if
语句只能判断 bool 值——没有C语言那样的非零既为真的规则,Rust 中传给 if 进行判断的表达式最终必须要得出一个 bool 值。
if 5 > 2 { println!("5 > 2"); }
关于 match
会在后续和模式匹配一起讲解,此处先挖一个坑,你可以你可以理解为 match
是Rust 提供的一个比switch
更牛逼的多路分支结构语句(只能这样粗略的认为,Rust 并没有提供 switch 语句,而且 match 与 switch 的可比性并不强,这样说只是意在帮你快速构建一个Rust的印象)。
Rust 中的循环结构有:loop, while,do-while,for。
// 一個普通的 for 循環,`..` 是 `Range` 的語法 for i in 1..100 { print!("{},",i); } println!(); // 普通的 loop 循環,直到手動調用 break 退出之前都會一直循環執行 let mut i = 100; loop { print!("{},",i); i -= 1; if i <= 0 { break; } } println!(); // 另一個普通的 loop 循環,但是可以通過 break 返回一個值 let mut i = 1000; let mut c:u32 = 0; let count = loop { c += 1; i /= 2; if i <= 0 { break c } }; println!("{}", count); // 這個沒啥好說的 while i < 100 { i += 1; }
除了在 loop 中可以通過 break 返回值之外,Rust 基本與其他語言的循環控制結構沒啥不一樣。
在講函數之前稍微提兩個概念: 表達式和语句——经过一系列的动作之后没有任何返回的叫語句,有返回的叫表達式。假如把 Rust 当中的任何行爲都看作函數調用,那麼就是有返回值的函數是表達式,沒有返回值的函數是語句(不要說你把返回值當參數傳遞的情況)。
那麼這兩個概念有什麼作用呢?那就是關於函數返回值,除了顯示的調用 return
返回,Rust 會講函數的最後一個語句的結果當作返回值返回,而不需要使用 return
手動返回。比如下面的函數都返回相同的結果。.
fn add_1(a: i32, b: i32)-> i32{ a+b } fn add_2(a: i32, b: i32)-> i32{ return a+b; }
從這兩個例子中你也可以看見:
fn
是函數申明關鍵字fn
之後的是函數名->
指定return
指定或由最後一個表達式返回。