昨天已经把开发环境搞出来了,接下来一起学习一下基本内容,可以对比已经掌握的语言。
===========================================
基本语法和数据结构
如何定义变量、函数、和数据结构
变量
常量(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)), 发送群聊消息事件
}
控制流程
-
顺序执行
-
函数调用
-
循环:for, loop
-
跳转
-
分支跳转: if/else
-
可以通过模式匹配 表达式 来进行分支跳转。
-
错误跳转: 会提前终止当前函数的执行,向上一层返回错误。
-
异步跳转: 当async函数执行await时,当前上下文可能被阻塞,执行流程会跳转到另一个异步任务执行,知道await不再阻塞。
明天一起尝试着写一个cli小工具吧。