[dart學習]第五篇:操做符

前言:本系列內容假設讀者有必定的編程基礎,如瞭解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.

相關文章
相關標籤/搜索