Rust 基础语法(一) -- 变量、运算与注释

2022-06-27 17:06:48 浏览数 (1)

1. 引言

上一篇文章中我们已经用 Rust 运行了 Hello World 程序,那么,接下来我们就来学习一下 Rust 的基础语法。

2. 标准输出

上一篇文章中,我们已经看到了 Rust 标准输出的例子:

代码语言:javascript复制
fn main() {
    let a = 12;
    println!("a is {}", a);
}

2.1 输出函数

Rust 标准输出函数有两个:

  1. println!()
  2. print!()

两个的区别仅在于是否在末尾加上换行符。

2.2 占位符

上面的例子中,在输出参数中存在一个占位符 {},用来指代后面参数列表中的参数:

代码语言:javascript复制
println!("a is {}, a again is {}", a, a);

在这个例子中,参数列表中的 a 出现了两次,看起来有些冗余,rust 允许在 {} 中加入数字来进行对参数列表进行索引:

代码语言:javascript复制
println!("a is {0}, a again is {0}", a);

如何转义占位符,从而能够输出 {} 呢?

代码语言:javascript复制
println!("{{}}");

这样就会输出:

{}

3. Rust 的变量

3.1 变量

在本文的第一个例子中,我们看到了 let 关键字。它用来声明变量:

代码语言:javascript复制
let a = 123;

变量 a 在此声明之后,便拥有了类型,但我们并不能更改 a 的值,因为 a 并不是一个可变变量。

如果想让 a 被重新赋值,那么就需要用另一个关键字 mut 将变量标记为可变:

代码语言:javascript复制
let mut a = 123;
a = 456;

但是要记住,a 是有类型的,即便 a 是可变的,仍然不能为 a 赋予其他类型的值。

3.2 重影

尽管不可变变量不能被重新赋值,但它是可以被重新声明的,通过重新声明可以重新绑定这一变量,从而为变量赋予新的值。

代码语言:javascript复制
fn main() {
    let a = 123;
    let a = "xyz";
    println!("The value of a is {}", a);
}

例如你可以这样使用重影机制:

代码语言:javascript复制
fn main() {
    let x = 5;
    let x = x   1;
    let x = x * 2;
    println!("The value of x is: {}", x);
}

会输出:

The value of x is: 12

4. Rust 数据类型

和其他语言类似,Rust 中数据类型也分为以下几个类型:

  1. 整型
  2. 浮点型
  3. 布尔型
  4. 字符型
  5. 数组类型

4.1 整型

位长度

有符号

无符号

8-bit

i8

u8

16-bit

i16

u16

32-bit

i32

u32

64-bit

i64

u64

128-bit

i128

u128

arch

isize

usize

isize 和 usize 两种整数类型是用来衡量数据大小的,它们的位长度取决于所运行的目标平台。

整型数的不同进制的写法有以下几种:

进制

十进制

98_222

十六进制

0xff

八进制

0o77

二进制

0b1111_0000

字节(只能表示 u8 型)

b'A'

可以在变量声明时指定变量类型:

代码语言:javascript复制
fn main() {
    let x:i32 = 123;
}

4.2 浮点型

浮点型分为 32 位浮点数 f32 和 64 浮点数 f64。

代码语言:javascript复制
fn main() {
    let x = 2.0; // f64
    let y: f32 = 3.0; // f32
}

4.3 布尔型

布尔型有两个取值:

  • true
  • false

4.4 字符型

Rust 中的字符型用 char 表示,大小为 4 字节,中文字符串则强制使用 UTF-8 编码。

4.5 数组与元组

与其他语言非常类似,数组和元组就是一组数据的集合。

  • 需要注意的是,rust 中的数组和元组的元素都是不可变的,也就是说声明后不能更新数组或元组中的某个元素。

1. 元组

元组是通过一堆括号包括的一组数据,可以拥有不同的数据类型:

代码语言:javascript复制
let tup: (i32, f64, u8) = (500, 6.4, 1);
// tup.0 等于 500
// tup.1 等于 6.4
// tup.2 等于 1
let (x, y, z) = tup;
// y 等于 6.4

2. 数组

数组使用方括号包括的一组数据,这些数据必须是相同类型:

代码语言:javascript复制
let a = [1, 2, 3, 4, 5];

5. 数学运算

rust 支持基本的数学运算,如:

  • 加:
  • 减:-
  • 乘:*
  • 除:/
  • 取余:%
  • 赋值数学运算: =、-= 等
  • Rust 不支持 与 -- 操作

6. 注释

和许多其他语言一样,Rust 支持下面的三种注释:

代码语言:javascript复制
// 这是第一种注释方式
代码语言:javascript复制
/* 这是第二种注释方式 */
代码语言:javascript复制
/*
 * 多行注释
 * 多行注释
 * 多行注释
 */

除此以外,rust 还有一种特殊的用于说明文档的注释:

代码语言:javascript复制
/// Adds one to the number given.
///
/// # Examples
///
/// ```
/// let x = add(1, 2);
///
/// ```

fn add(a: i32, b: i32) -> i32 {
    return a   b;
}
   
fn main() {
    println!("{}",add(2,3));
}

Cargo 的 cargo doc 功能可以自动将文档书名注释变成 html 格式的说明文档。

0 人点赞