Rust 基础语法

Rust 基础语法

Rust 是一种系统编程语言,由 Mozilla 开发,专注于安全、速度和并发性。它是一种静态类型语言,具有丰富的类型系统和所有权模型,这使得它在编译时能够提供内存安全保证。Rust 的语法受到了多种编程语言的影响,包括 C++、Haskell 和 OCaml。本文将介绍 Rust 的一些基础语法,帮助初学者快速入门。

变量和数据类型

Rust 中的变量使用 let 关键字声明,并且是默认不可变的。如果需要声明可变变量,可以在变量名前加上 mut 关键字。Rust 是静态类型语言,但大多数情况下,类型推导可以让编译器自动推断出变量的类型。

let x = 42; // x 是不可变的,类型为 i32
let mut y = 3.14; // y 是可变的,类型为 f64

Rust 有几种基本数据类型,包括整数(如 i32u32)、浮点数(如 f64)、布尔值(bool)、字符(char)和元组(tuple)。

函数

Rust 中的函数使用 fn 关键字定义。函数可以接受参数并返回值。函数的返回类型位于参数列表之后,用箭头 -> 指示。

fn add(x: i32, y: i32) -> i32 {
    x + y // Rust 自动返回最后一个表达式的值
}

控制流

Rust 提供了基本的控制流结构,包括 if 表达式、循环和匹配(match)表达式。

if x < 5 {
    println!("x is less than 5");
} else {
    println!("x is 5 or more");
}

// 循环
loop {
    println!("Loop forever!");
}

// 循环中的 break
let mut counter = 0;
loop {
    counter += 1;
    if counter == 10 {
        break;
    }
}

// 匹配表达式
match x {
    1 => println!("One"),
    2 => println!("Two"),
    _ => println!("Something else"), // _ 是通配符,匹配任何值
}

所有权和借用

Rust 的所有权模型是其核心特性之一,它确保了内存安全,无需垃圾回收。在 Rust 中,每个值都有一个所有者,当所有者超出作用域时,该值将被丢弃。

{
    let s = String::from("hello"); // s 是字符串的所有者
} // 这里 s 超出作用域,字符串被丢弃

Rust 还允许借用,即允许引用一个值而不取得其所有权。借用可以是可变的或不可变的。

let mut s = String::from("hello");
let r1 = &s; // 不可变借用
let r2 = &mut s; // 可变借用

结构体和枚举

Rust 使用 struct 关键字定义结构体,使用 enum 关键字定义枚举。

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

enum Color {
    Red,
    Green,
    Blue,
}

模块和包

Rust 使用 mod 关键字组织代码到模块中。每个 Rust 项目都是一个包(crate),可以包含多个模块。

mod front_of_house {
    mod hosting {
        fn add_to_waitlist() {}
    }
}

错误处理

Rust 中的错误处理通常使用 ResultOption 类型。Result 类型用于可能失败的运算,Option 类型用于处理可能不存在的情况。

fn divide(numerator: f64, denominator: f64) -> Result<f64, String> {
    if denominator == 0.0 {
        Err("Cannot divide by zero".to_string())
    } else {
        Ok(numerator / denominator)
    }
}

并发

Rust 的所有权和类型系统使其在并发编程中非常安全。Rust 提供了多种并发抽象,包括线程(thread)、通道(channel)和互斥锁(mutex)。

use std::thread;
use std::sync::mpsc;

fn main() {
    let (tx, rx) = mpsc::channel();

    thread::spawn(move || {
        let val = String::from("hello");
        tx.send(val).unwrap();
    });

    let received = rx.recv().unwrap();
    println!("Received: {}", received);
}

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lsx202406

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值