Rust 编程学习笔记Day 2 基本语法和数据结构

85 阅读2分钟

昨天已经把开发环境搞出来了,接下来一起学习一下基本内容,可以对比已经掌握的语言。

===========================================

基本语法和数据结构

如何定义变量、函数、和数据结构

变量

常量(const) 静态变量(static) 必须声明类型
变量类型可以省略,上面说过支持类型推导。
如果要改变变量的值,需要加mut关键字。在rust的世界里 默认变量不可变的。最小权限原则(Principle of Least Privilege)
如果用mut 但是后面一直没有改变这个变量,编译的时候会有提示告警,让移除不必要的mut。

函数

函数是一等公民,可以是参数,返回值。 举个例子:

fn apply(value: i32, f: fn(i32) -> i32) -> i32 {
    f(value)
}

fn square(value: i32) -> i32 {
    value * value
}

fn cube(value: i32) -> i32 {
    value * value * value
}

fn main() {
    println!("apply square: {}", apply(2, square));
    println!("apply cube: {}", apply(2, cube));
}

数据结构

可以像C语言一样,用struct定义结构体,用enum定义标签联合体。
还可以像Python一样 随手定义元组(tuple)类型。

举例:聊天服务的数据结构

枚举类型

enum Gender {  
    Unspecified = 0,  
    Female = 1,  
    Male = 2,
}

元组结构体

#[derive(Debug, Copy, Clone)]
struct UserId(u64);
#[derive(Debug, Copy, Clone)]

标准结构体

struct User {  
    id: UserId,  
    name: String,  
    gender: Gender,
}

struct Room {  
    id: RoomId,  
    name: String,  
    owner: UserId,
}

还可以定义事件

enum Event {  
    Join((UserId, RoomId)),      加入房间事件
    Leave((UserId, RoomId)),      离开房间事件
    Message((UserId, RoomId, String)), 发送群聊消息事件
}

控制流程

  1. 顺序执行

  2. 函数调用

  3. 循环:for, loop

  4. 跳转

  • 分支跳转: if/else

  • 可以通过模式匹配 表达式 来进行分支跳转。

  • 错误跳转: 会提前终止当前函数的执行,向上一层返回错误。

  • 异步跳转: 当async函数执行await时,当前上下文可能被阻塞,执行流程会跳转到另一个异步任务执行,知道await不再阻塞。

明天一起尝试着写一个cli小工具吧。