前言:本系列內容假設讀者有必定的編程基礎,如瞭解C語言、python等。python
本節一塊兒來學習dart的操做符,直接拷貝官網的操做符描述表以下:express
Description | Operator |
---|---|
unary postfix | expr++ expr-- () [] . ?. |
unary prefix | -expr !expr ~expr ++expr --expr |
multiplicative | * / % ~/ |
additive | + - |
shift | << >> >>> |
bitwise AND | & |
bitwise XOR | ^ |
bitwise OR | | |
relational and type test | >= > <= < as is is! |
equality | == != |
logical AND | && |
logical OR | || |
if null | ?? |
conditional | expr1 ? expr2 : expr3 |
cascade | .. |
assignment | = *= /= += -= &= ^= etc. |
上表中列出的操做符的前後順序,是和各操做符的優先級對應的。例如:乘法運算符 * 的優先級高於加法運算符 +。編程
同其餘編程語言同樣,建議你們在寫表達式時不要吝嗇使用括號,這樣可使代碼更易讀。如 a*b+3==c*f,建議寫成 ((a*b)+3) == (c*f) 的形式。編程語言
這裏指出一點:對於雙元操做符,如加法運算符+,若是操做符左右兩邊的參數類型不一致,則以左邊的參數類型爲準。如: 3.14+6=9.14,使用浮點型的加法運算。ide
下面詳細來看各類類型的運算符。post
(一)算術運算符學習
+ |
Add(加法運算符) |
– |
Subtract(減法運算符) |
-expr |
Unary minus, also known as negation (reverse the sign of the expression) (負數表達) |
* |
Multiply (乘法運算符) |
/ |
Divide (除法運算符) |
~/ |
Divide, returning an integer result (返回整型的除法運算符) |
% |
Get the remainder of an integer division (modulo) (取模、取餘運算符) |
算術運算符比較簡單,下面經過幾個例子僞代碼來講明:ui
3 + 2 == 5; 6 - 2 == 4; 2 - 9 == -7; 3 * 5 == 15; 5 % 2 == 1; // 注意如下兩個運算符 5 / 2 == 2.5; //結果是浮點型 5 ~/ 2 == 2; //結果是整型
另外,dart還支持++和--(自增、自減)運算,依然看例子:spa
var a,b; a=0; b=++a; // a先自增1,再賦值給b assert(a==b); // 1 == 1 a=0; b=a++; // a先賦值給b,而後a再自增1 assert(a!=b); // 1 != 0; // --運算同理
(二)關係操做符code
Operator | Meaning |
---|---|
== |
Equal; (判斷相等) |
!= |
Not equal (判斷不相等) |
> |
Greater than (大於) |
< |
Less than (小於) |
>= |
Greater than or equal to (大於或等於) |
<= |
Less than or equal to (小於或等於) |
這個也比較簡單,只需注意如下幾點:
null == null 是正確的,返回true,若其中一個操做數是null,另外一個是非null,則返回false;
若是須要判斷兩個操做數是不是相同的類型,可以使用 identical() 接口。
(三)類型檢查運算符
Operator | Meaning |
---|---|
as |
Typecast (also used to specify library prefixes) (用於類型強轉) |
is |
True if the object has the specified type (用於判斷變量是否屬於某種類型) |
is! |
False if the object has the specified type (用於判斷變量是否不屬於某類型) |
依然看官網的例子:
// 例句1
if (emp is Person) { // Type check emp.firstName = 'Bob'; }
// 例句2
(emp as Person).firstName = 'Bob';
上例中,例句1檢查emp變量是不是Person類型的實例,若是是,則賦值名稱元素Bob,若是不是,則什麼也不操做;
例句2將emp強轉爲Person類型,並嘗試對firstname賦值。若是emp不是Person類型,則本句話會拋出異常。
(四)賦值運算符
這個就很是常見了,咱們在其餘語言中也是使用最多的就是 = 賦值運算符。dart有一個特例,支持 ??= 賦值運算符。咱們看例子:
// 將value賦值給變量a
a = value;
// 若是b是null,則將value賦值給b; 不然b保持原值
b ??= value;
dart一樣也支持複合賦值運算符,例如: +=、-=、*=、/=、~/=、%=、<<=、>>=、&=、|=、^= 。 具體用法例如 a += 2 表示 a = a + 2; 再也不細述。
(五)邏輯運算符
可使用邏輯運算符反轉或組合bool表達式。這個就再也不舉例使用了,直接看下錶:
Operator | Meaning |
---|---|
!expr |
inverts the following expression (changes false to true, and vice versa) (邏輯非) |
|| |
logical OR (邏輯或) |
&& |
logical AND (邏輯與) |
(六)位運算符
這個對於像博主這樣搞嵌入式的人來講再熟悉不過了吧 ^_^
Operator | Meaning |
---|---|
& |
AND (位與) |
| |
OR (位或) |
^ |
XOR (位異或) |
~expr |
Unary bitwise complement (0s become 1s; 1s become 0s) (位取反) |
<< |
Shift left (左移) |
>> |
Shift right (右移) |
位運算通常應用於整型數字,這個也屬於比較基本的,就也再也不舉例了
(七)條件運算符
熟悉C語言的朋友應該知道C語言裏邊的一個三目運算符 ?: ,這種運算符可以簡化代碼(固然,可讀性會降低)。dart支持兩個條件運算符:
condition ? expr1 : expr2 //若是condition是true,則執行expr1並返回; 不然執行expr2並返回 expr1 ?? expr2 //若是expr1是非空,則執行expr1並返回; 不然執行expr2並返回
咱們看一下第二種運算符的一個例子吧
// Slightly longer version uses ?: operator. String playerName(String name) => name != null ? name : 'Guest'; // Very long version uses if-else statement. String playerName(String name) { if (name != null) { return name; } else { return 'Guest'; } } // 以上兩段代碼的做用是等價的
(八)其餘運算符
dart還支持一些比較不經常使用或不宜用的運算符(我的觀點),好比 級聯運算符,本人以爲使用這樣的運算符會致使代碼及其不易讀且容易出錯。這裏就再也不一一列舉了,你們能夠去官網瞭解。(附地址: https://dart.dev/guides/language/language-tour#cascade-notation-)
Game over.