目录

数据类型与函数

原生数据类型

整数类型

长度 有符号 无符号
8位 i8 u8
16位 i16 u16
32位 i32 u32
64位 i64 u64
128位 i128 u128
架构相关 isize usize

默认整数类型是 i32

let a: i8 = -128;         // -128 到 127
let b: u8 = 255;           // 0 到 255
let c = 42;                // 默认 i32
let d: i64 = 9_223_372_036_854_775_807; // 下划线提高可读性
let e: usize = 10;         // 指针宽度,用于索引

浮点类型

let x: f32 = 3.14;         // 32 位浮点
let y: f64 = 3.1415926535; // 64 位浮点(默认)

布尔类型

let is_ok: bool = true;
let is_not: bool = false;

字符类型

char 是 4 字节的 Unicode 标量值:

let c = '中';           // Unicode 字符
let emoji = '😊';       // 表情符号
let letter = 'A';

复合类型

元组(Tuple)

固定长度的异构集合:

let tup: (i32, f64, char) = (42, 3.14, 'R');
 
// 解构(destructure)
let (x, y, z) = tup;
println!("{}, {}, {}", x, y, z);
 
// 索引访问
println!("{}", tup.0);  // 42
println!("{}", tup.1);  // 3.14

数组(Array)

固定长度的同构集合(栈上分配):

let arr: [i32; 5] = [1, 2, 3, 4, 5];
let zeros = [0; 3];       // [0, 0, 0]
 
println!("{}", arr[0]);   // 1
println!("len: {}", arr.len()); // 5

访问越界索引会导致运行时 panic,Rust 会安全地检查边界。

函数

函数定义

fn greet(name: &str) {
    println!("你好,{}!", name);
}
 
fn main() {
    greet("Rust");
}

返回值

指定返回类型,最后一个表达式即为返回值:

fn add(x: i32, y: i32) -> i32 {
    x + y // 注意:没有分号,是表达式
}
 
fn double(x: i32) -> i32 {
    return x * 2; // 也可以用 return,但通常省略
}
 
fn main() {
    println!("{}", add(3, 5));  // 8
    println!("{}", double(4));  // 8
}

表达式 vs 语句

fn main() {
    let x = {
        let a = 2;
        let b = 3;
        a + b // 代码块作为表达式,返回 5
    };
    println!("{}", x); // 5
}

发散函数

! 表示永不返回的函数:

fn forever() -> ! {
    loop {
        // 永不退出
    }
}
 
fn panic_forever() -> ! {
    panic!("直接崩溃"); // panic! 也是发散函数
}

注释

// 这是单行注释
 
/*
 这是多行注释
 可以跨越多行
*/
 
/// 文档注释(生成文档用)
/// 可以包含 Markdown
fn documented_func() {}
 
//! 模块级别文档注释,写在文件开头

本章实践

计算圆的面积和周长:

fn circle_area(radius: f64) -> f64 {
    std::f64::consts::PI * radius * radius
}
 
fn circle_circumference(radius: f64) -> f64 {
    2.0 * std::f64::consts::PI * radius
}
 
fn main() {
    let r = 5.0;
    println!("半径: {}", r);
    println!("面积: {:.2}", circle_area(r));
    println!("周长: {:.2}", circle_circumference(r));
}

本章小结