
- Rust 教程
- Rust - 首頁
- Rust - 簡介
- Rust - 環境搭建
- Rust - HelloWorld 示例
- Rust - 資料型別
- Rust - 變數
- Rust - 常量
- Rust - 字串
- Rust - 運算子
- Rust - 決策語句
- Rust - 迴圈
- Rust - 函式
- Rust - 元組
- Rust - 陣列
- Rust - 所有權
- Rust - 借用
- Rust - 切片
- Rust - 結構體
- Rust - 列舉
- Rust - 模組
- Rust - 集合
- Rust - 錯誤處理
- Rust - 泛型型別
- Rust - 輸入輸出
- Rust - 檔案輸入/輸出
- Rust - 包管理器
- Rust - 迭代器和閉包
- Rust - 智慧指標
- Rust - 併發
- Rust 有用資源
- Rust - 快速指南
- Rust - 有用資源
- Rust - 討論
Rust - 資料型別
型別系統表示語言支援的不同值型別。在程式儲存或操作值之前,型別系統會檢查值的有效性。這確保程式碼按預期執行。型別系統還可以提供更豐富的程式碼提示和自動化文件。
Rust 是一種靜態型別語言。Rust 中的每個值都具有某種資料型別。編譯器可以根據分配給變數的值自動推斷變數的資料型別。
宣告變數
使用let關鍵字宣告變數。
fn main() { let company_string = "TutorialsPoint"; // string type let rating_float = 4.5; // float type let is_growing_boolean = true; // boolean type let icon_char = '♥'; //unicode character type println!("company name is:{}",company_string); println!("company rating on 5 is:{}",rating_float); println!("company is growing :{}",is_growing_boolean); println!("company icon is:{}",icon_char); }
在上面的示例中,變數的資料型別將根據分配給它們的值推斷得出。例如,Rust 將字串資料型別分配給變數company_string,浮點資料型別分配給rating_float等。
println!宏接受兩個引數:
- 特殊的語法{ },它是佔位符
- 變數名或常量
佔位符將被變數的值替換
上述程式碼片段的輸出將是:
company name is: TutorialsPoint company rating on 5 is:4.5 company is growing: true company icon is: ♥
標量型別
標量型別表示單個值。例如,10、3.14、'c'。Rust 有四種主要的標量型別。
- 整數
- 浮點數
- 布林值
- 字元
我們將在後續章節中學習每種型別。
整數
整數是沒有小數部分的數字。簡單來說,整數資料型別用於表示整數。
整數可以進一步分類為有符號和無符號整數。有符號整數可以儲存負值和正值。無符號整數只能儲存正值。下面是整數型別的詳細描述:
序號 | 大小 | 有符號 | 無符號 |
---|---|---|---|
1 | 8 位 | i8 | u8 |
2 | 16 位 | i16 | u16 |
3 | 32 位 | i32 | u32 |
4 | 64 位 | i64 | u64 |
5 | 128 位 | i128 | u128 |
6 | 架構相關 | isize | usize |
整數的大小可以是架構相關的。這意味著資料型別的大小將從機器的架構派生。大小為架構相關的整數在 x86 機器上為 32 位,在 x64 機器上為 64 位。架構相關的整數主要用於索引某種集合。
示例
fn main() { let result = 10; // i32 by default let age:u32 = 20; let sum:i32 = 5-15; let mark:isize = 10; let count:usize = 30; println!("result value is {}",result); println!("sum is {} and age is {}",sum,age); println!("mark is {} and count is {}",mark,count); }
輸出如下:
result value is 10 sum is -10 and age is 20 mark is 10 and count is 30
如果你將age的值替換為浮點數,上面的程式碼將返回編譯錯誤。
整數範圍
每個有符號變體可以儲存從-(2^(n-1)) 到 2^(n-1) -1的數字,其中 n 是該變體使用的位數。例如,i8 可以儲存從-(2^7) 到 2^7 -1的數字——這裡我們將n替換為 8。
每個無符號變體可以儲存從0到(2^n)-1的數字。例如,u8 可以儲存從0到(2^8)-1的數字,即 0 到 255。
整數溢位
當分配給整數變數的值超過 Rust 為該資料型別定義的範圍時,就會發生整數溢位。讓我們用一個例子來理解這一點:
fn main() { let age:u8 = 255; // 0 to 255 only allowed for u8 let weight:u8 = 256; //overflow value is 0 let height:u8 = 257; //overflow value is 1 let score:u8 = 258; //overflow value is 2 println!("age is {} ",age); println!("weight is {}",weight); println!("height is {}",height); println!("score is {}",score); }
無符號 u8 變數的有效範圍是 0 到 255。在上面的示例中,變數被賦值大於 255(Rust 中整數變數的上限)的值。執行時,上述程式碼將返回警告:警告 - u8 超出範圍的字面量(針對 weight、height 和 score 變數)。超過 255 的溢位值將從 0、1、2 等開始。最終的輸出(不含警告)如下所示:
age is 255 weight is 0 height is 1 score is 2
浮點數
Rust 中的浮點資料型別可以分類為f32和f64。f32 型別是單精度浮點數,f64 是雙精度浮點數。預設型別是 f64。考慮以下示例以瞭解有關浮點資料型別的更多資訊。
fn main() { let result = 10.00; //f64 by default let interest:f32 = 8.35; let cost:f64 = 15000.600; //double precision println!("result value is {}",result); println!("interest is {}",interest); println!("cost is {}",cost); }
輸出如下所示:
interest is 8.35 cost is 15000.6
自動型別轉換
Rust 不允許自動型別轉換。考慮以下程式碼片段。整數的值被賦值給浮點變數interest。
fn main() { let interest:f32 = 8; // integer assigned to float variable println!("interest is {}",interest); }
編譯器會丟擲一個如下所示的型別不匹配錯誤。
error[E0308]: mismatched types --> main.rs:2:22 | 2 | let interest:f32=8; | ^ expected f32, found integral variable | = note: expected type `f32` found type `{integer}` error: aborting due to previous error(s)
數字分隔符
為了方便閱讀大數字,我們可以使用視覺分隔符 _ 下劃線來分隔數字。也就是說,50,000 可以寫成 50_000。這在下面的示例中顯示。
fn main() { let float_with_separator = 11_000.555_001; println!("float value {}",float_with_separator); let int_with_separator = 50_000; println!("int value {}",int_with_separator); }
輸出如下所示:
float value 11000.555001 int value 50000
布林值
布林型別有兩個可能的值——true或false。使用bool關鍵字宣告布林變數。
示例
fn main() { let isfun:bool = true; println!("Is Rust Programming Fun ? {}",isfun); }
上述程式碼的輸出將是:
Is Rust Programming Fun ? true
字元
Rust 中的字元資料型別支援數字、字母、Unicode 和特殊字元。使用char關鍵字宣告字元資料型別的變數。Rust 的 char 型別表示 Unicode 標量值,這意味著它可以表示的遠不止 ASCII 字元。Unicode 標量值的範圍是從U+0000到U+D7FF和U+E000到U+10FFFF(包含)。
讓我們考慮一個例子來了解有關字元資料型別的更多資訊。
fn main() { let special_character = '@'; //default let alphabet:char = 'A'; let emoji:char = '😁'; println!("special character is {}",special_character); println!("alphabet is {}",alphabet); println!("emoji is {}",emoji); }
上述程式碼的輸出將是:
special character is @ alphabet is A emoji is 😁