Rust簡明學習手冊 - Rust安裝和基本概念

語言: CN / TW / HK

前言

好久沒學新語言了,最近打算學學Rust並記錄一下Rust的要點,方便後期給自己參考。

快速安裝

Macos | Linux

curl --proto '=https' --tlsv1.3 http://sh.rustup.rs -sSf | sh

Windows

安裝包下載地址

Visual Studio Code 外掛

搜尋安裝rust-analyzer即可

快速建立rust專案

cargo new 專案名稱 專案結構如下 專案根目錄 - src - main.rs Cargo.toml src下是原始碼,Cargo.toml配置了專案的依賴,版本號等資訊,cargo是rust的包管理工具

執行rust程式碼

通過Cargo建立的專案可以直接在專案根目錄下執行 cargo run 如果單獨建立一個rust原始碼檔案,則可以使用rustc編譯,然後手動執行編譯產物 rustc app.rs && ./app

變數

定義

let int_var = 222; int_var = 100; // error! 直接使用let定義時,變數不可被更改,增加mut才可以修改 let mut int_var = 222; int_var = 100; // ok

作用域

變數只在當前作用域生效,作用域的定義類似於C,比如函式,控制語句的Body。當前作用域定義的同名變數可以覆蓋父作用域的相應變數。 fn function() { let int_var = 100; // 只在函式內部生效 if true { let int_var = 20; // 這裡訪問到的int_var則是20 } }

常量

const THIS_IS_A_CONST: i64 = 10 * 200; 常量需要明確指定型別,由const修飾,賦值表示式只能是編譯時可計算出結果的。

方法

定義

fn function_name(param1: Type, param2: Type) -> ReturnType { return xxx; // or xxx } 由關鍵字fn開頭,引數列表由逗號隔開,引數名在前,型別追加在冒號後面,返回值型別在->符號後拼接。返回值可以使用return返回,也可以不寫return,但是注意分號也要去掉。

呼叫

分為兩種呼叫方式,類似於其他語言的類方法和例項方法,具體會在介紹mod時詳細展開 xxx::classFunc() xxx.instancFunc()

資料型別

種類

  • 整型:分為iXX和uXX系列,XX支援8,16,32,64,128,直接十六進位制(0x),八進位制(0o),二進位制(0b),Byte(b'A')。預設i32
  • 浮點型:f32和f64,預設f64
  • 布林值:bool,true或者false
  • 字元:char,支援多位元組字元,包括表情
  • tuple:元組,例如 let tup: (i32, f64, u8) = (500, 6.4, 1);
  • 陣列:let arr = [1, 2, 3, 4, 5];

雖然rust是強型別語言,但如果編譯器能推匯出來型別,我們定義變數時都可以忽略型別,這個和目前很多現代語言類似 let int_var = 222; // 這裡不用寫i32 let int_var = xxx::funcReturnInt32Var(); // 這裡不用寫i32

註釋

單行

// hello, world

多行

文件上沒有說這種註釋方式,但是我試了一下的確可以 /* Name:func Param: arg1 */

流程控制語句

if

``` // 常規的if else if a < 5 {

} else if b == 6 {

} else {

}

// 對標三目操作符 let a = if b==0 {someval} else {otherval}; ```

loop

loop { // 永遠執行 }

loop的break不僅退出迴圈,還可以返回一個值 let val = loop { ... break some_val; }

while

和其他語言的while類似 while a < 5 { ... break; }

for

和其他語言的for類似,對陣列或者其他可迭代的物件進行元素遍歷 ``` for item in arr {

} ```