基本語法與結構
1 | fu main() { |
fn
定義函數的關鍵字。main
函式為程式入口。println!()
為呼叫 rust 的巨集。;
每一個指令結尾都需要一個分號,來表示指令的結束。//
為單行註解。
變數與常數
不可變變數
在 Rust 中宣告變數的方式為 let <name> = <variable>
,這個變數是不能被改變的。如果你試圖改變這個變數,你可能會得到 “cannot assign twice to immutable variable <name>” 的錯誤。
1 | // Example |
可變變數
在 Rust 中想要改變變數,可以在宣告時使用 let mut
,讓它們可以被改變的。
1 | // Example |
常數
大多數的語言當中,都有常數(constant) 的用法。在 Rust 中,宣告常數的方法為 const PI: f32 = 3.1415926
,而在 Rust 中宣告常數必須給定類型 (f32 為 32 位元的浮點數表示)。
1 | // Example |
資料型別
在剛剛的常數中提到,常數的宣告必須給定資料類型,而一般用 let
或是 let mut
也可以將類型給宣告進去,其方法是在變數名稱後面加上 : <type>
。
以下我們介紹在 Rust 中的型別。
純量型別 - scalar
- 整數
在整數的類型中分為帶號整數(signed
) 與非帶號整數 (unsigned
),在這兩者中有可以分為 8-bits, 16-bits, 32-bits, 64-bits, 128-bits 與系統架構位元數,表示方法如下:
Length | signed | unsigned |
---|---|---|
8-bits | i8 | u8 |
16-bits | i16 | u16 |
32-bits | i32 | u32 |
64-bits | i64 | u64 |
128-bits | i128 | u128 |
arch | isize | usize |
並且可以用各種方始表達整數數值。如果數值長度太長可以運用 _
來增加可讀性。
- 十進位:一般表達方式。
- 八進位:在數值前面加上前綴
0o
。 - 十六進位:在數值前面加上前綴
0x
。 - 二進位:在數值前面加上前綴
0b
。
1 | // Example |
- 浮點小數
幅點小數則分為f32
與f64
分別表示 32 位元與 64 位元。
1 | // Example |
- 布林值
布林值則使用bool
表示。
1 | // Example |
- 字元
字元用char
表示。
1 | // Example |
複合型別 - compound
- Tuple
由多個數值組成,每個數值的資料型別不一定要一致,使用方法為利用小括號將數值包起來,並使用逗號分隔開來。
我們可以利用 <tuple_name>.<index>
來存取 Tuple 裡的數值。也可以用 pattern matching 的方式拆成多個變數。
1 | // Example |
另外,一個空的 Turple 叫做 Unit
,這通常代表一個空的數值或是空的回傳型別。
- Array
而 Array 與 Tuple 不同的是 Tuple 可以由多個型別組成,而 Array 的所有數值必須是相同的型別,使用方法為用中括號將多個數值刮起來,並用透好隔開。
並且我們可以用 [<type | value>; <count>]
來表示 <count>
個 <type>
的陣列,也可以用來表示一個有 <count>
個 <value>
的陣列。
存取上與其他大多數的語言一樣用 <array_name>[<index>]
;
1 | // Example |
使用者輸入
當我們要讀取使用者輸入時,必須先標準函式庫(std
)中的 io
函式庫。
1 | use std:io |
接著我們使用函式庫中的 stdin
函式,這個函式會回傳 std::io::Stdin
的物件,其中有 read_line
函式,用來讀取一行輸入。
最後 readl_line
會回傳一個 Result
,這是一個 enums,並且可能為 Ok
與 Err
,並且有 expect
的函示,用來處理錯誤訊息。
1 | use std:io |
若你使用 expect,程式仍能編譯,但是會產生一個警告 (warning)。
參考資料:
- https://doc.rust-lang.org/stable/book (ch01, ch03)