學習Rust 基礎語法
Rust 語言是一種高效、可靠的通用高階語言。其高效不僅限於開發效率,它的執行效率也是令人稱讚的,是一種少有的兼顧開發效率和執行效率的語言。 |
變數,基本型別,函式,註釋和控制流,這些幾乎是每種程式語言都具有的程式設計概念。
這些基礎概念將存在於每個 Rust 程式中,及早學習它們將使你以最快的速度學習 Rust 的使用。
首先必須說明,Rust 是強型別語言,但具有自動判斷變數型別的能力。這很容易讓人與弱型別語言產生混淆。
如果要宣告變數,需要使用 let 關鍵字。例如:
let a = 123;
只學習過 JavaScript 的開發者對這句話很敏感,只學習過 C 語言的開發者對這句話很不理解。
在這句宣告語句之後,以下三行程式碼都是被禁止的:
a = "abc"; a = 4.56; a = 456;
第一行的錯誤在於當宣告 a 是 123 以後,a 就被確定為整型數字,不能把字串型別的值賦給它。
第二行的錯誤在於自動轉換數字精度有損失,Rust 語言不允許精度有損失的自動資料型別轉換。
第三行的錯誤在於 a 不是個可變變數。
前兩種錯誤很容易理解,但第三個是什麼意思?難道 a 不是個變數嗎?
這就牽扯到了 Rust 語言為了高併發安全而做的設計:在語言層面儘量少的讓變數的值可以改變。所以 a 的值不可變。但這不意味著 a 不是"變數"(英文中的 variable),官方文件稱 a 這種變數為"不可變變數"。
如果我們編寫的程式的一部分在假設值永遠不會改變的情況下執行,而我們程式碼的另一部分在改變該值,那麼程式碼的第一部分可能就不會按照設計的意圖去運轉。由於這種原因造成的錯誤很難在事後找到。這是 Rust 語言設計這種機制的原因。
當然,使變數變得"可變"(mutable)只需一個 mut 關鍵字。
let mut a = 123; a = 456;
這個程式是正確的。
既然不可變變數是不可變的,那不就是常量嗎?為什麼叫變數?
變數和常量還是有區別的。在 Rust 中,以下程式是合法的:
let a = 123; let a = 456;
但是如果 a 是常量就不合法:
const a: i32 = 123; let a = 456;
變數的值可以"重新繫結",但在"重新繫結"以前不能私自被改變,這樣可以確保在每一次"繫結"之後的區域裡編譯器可以充分的推理程式邏輯。 雖然 Rust 有自動判斷型別的功能,但有些情況下宣告型別更加方便:
let a: u64 = 123;
這裡宣告瞭 a 為無符號 64 位整型變數,如果沒有宣告型別,a 將自動被判斷為有符號 32 位整型變數,這對於 a 的取值範圍有很大的影響。
重影的概念與其他面嚮物件語言裡的"重寫"(Override)或"過載"(Overload)是不一樣的。重影就是剛才講述的所謂"重新繫結",之所以加引號就是為了在沒有介紹這個概念的時候代替一下概念。
重影就是指變數的名稱可以被重新使用的機制:
例項
fn main() { let x = 5; let x = x + 1; let x = x * 2; println!("The value of x is: {}", x); }
這段程式的執行結果:
The value of x is: 12
重影與可變變數的賦值不是一個概念,重影是指用同一個名字重新代表另一個變數實體,其型別、可變屬性和值都可以變化。但可變變數賦值僅能發生值的變化。
let mut s = "123"; s = s.len();
這段程式會出錯:不能給字串變數賦整型值。
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2738982/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- markdown學習(基礎語法)
- Java學習之基礎語法Java
- Java學習之基礎語法練習Java
- go 學習記錄--基礎語法Go
- Java學習--jsp基礎語法JavaJS
- Hive學習筆記:基礎語法Hive筆記
- 學習python的基礎語法集合Python
- Scala學習筆記(2)-基礎語法筆記
- Kotlin學習筆記-基礎語法Kotlin筆記
- Markdown 基礎語法的學習和使用
- 真香,理解記憶法學習Python基礎語法Python
- Go學習筆記 - Go 基礎語法(1)Go筆記
- Go 學習筆記 - Go 基礎語法(2)Go筆記
- Erlang學習筆記(三)Erlang基礎語法筆記
- Python 3 學習筆記之——基礎語法Python筆記
- python菜鳥教程學習3:基礎語法Python
- lua學習之入門(二)----基礎語法1
- Blazor和Vue對比學習(基礎1.2):模板語法和Razor語法BlazorVue
- python 基礎習題1--基礎語法Python
- 語料庫基礎學習
- java語言基礎學習Java
- c語言基礎學習C語言
- 菜鳥學習筆記:Java基礎篇1(基礎語法、物件導向)筆記Java物件
- Java基礎-語法基礎Java
- 基礎語法
- 『學習資料推薦』零基礎掌握多國語言學習法
- Scala學習 1.1 Scala基礎與語法入門實戰
- Shell程式設計基礎學習之四:語法結構程式設計
- 初學Python(1)基礎語法Python
- 英語語法基礎
- Rust 語言學習之旅Rust
- 帶你學夠浪:Go語言基礎系列 - 8分鐘學基礎語法Go
- scala基礎語法-----Spark基礎Spark
- Dart語法基礎Dart
- Vue基礎語法Vue
- Java 基礎語法Java
- CSS 基礎語法CSS
- jQuery基礎語法jQuery