學習 Rust「1」簡化掉什麼?


學習 Rust「1」簡化掉什麼?

結論先行:從語法上說,Rust 基本無敵。

1. ++ 和 --

語言有無 ++、-- 語法C/C++/C#/Java有Go只支持放變量後,不支持放變量前Python/Rust/Scala無

++、-- 一般是 +=、-= 的特例(除了 C++ 的迭代器),沒有必要單獨支持,新語言傾向於語法的單一性。

Python 的情況比較有意思,放後面是語法錯誤,放前面其實就是正負號,+ 寫兩次還是原來的數,- 寫兩次是負負得正,也還是原來的數。

2. 三目運算符(?:)

語言有無 ?: 語法C/C++/C#/Java/Swift有Go/Python/Rust/Scala無

Rust 的 let = if else 就有 C 語言 ?: 的功能,即判斷語句的子語句塊可以有返回值。

3. 條件無需括號

語言條件需不需要括號C/C++/Java/Scala需要Go/Python/Rust/Swift不需要

字符是能少打一個是一個,有效預防鼠標手。另外,Go 和 Rust 的語句塊必須包含於 {}。

4. 異常處理

語言異常處理機制C/C++編譯器擴展 __try...__except...__finally, __leaveC++/C#/Java/Scala/Swiftthrow, try...catch...finallyPythonraise, try...except...else, try...finallyGo/Rust無

5. 換行符(;)

語言換行符C/C++/C#/Java必須JavaScript/Scala/Swift可選,有少數必須的情況Python/Go無Rust有是有,無是無(return),兩者含義不同

Rust 有分號的是語句(statement),返回值是 (),即沒有返回值。而沒分號的是表達式(expression),返回值就是自身的值。

其實想說的是:有的 return 被簡化掉了。省略 ; 就是省略 return,真香。但是,由於隱含 return,所以只能用於語句塊的最後一行。

6. case 隱含 break

語言case 是否隱含 breakC/C++/C#/Java必須顯式 breakGo/Rust/Swift隱含 break

Rust 優秀在用 match 代替 switch,明確告訴大家這是新語法,而 Go/Swift 用 switch,卻改變 case 行為,還多出一個 fallthrough 關鍵字,容易引起鯨神魂裂。


分享到:


相關文章: