Dart 學習筆記 函式及運算子

2021-10-02 10:37:37 字數 4581 閱讀 1618

dart 是一門真正物件導向的語言, 甚至其中的函式也是物件 。 這也意味著函式可以被賦值給變數或者作為引數傳遞給其他函式。 也可以把 dart 類的例項當做方法來呼叫。

以下是函式實現的示例:

bool isnoble(int atomicnumber)
如果函式中只有一句表示式,可以使用簡寫語法:

bool isnoble(int atomicnumber) => _noblegases[atomicnumber] != null;
函式有兩種引數型別: required 和 optional。 required 型別引數在引數最前面, 隨後是 optional 型別引數。 命名的可選引數也可以標記為 「@ required」 。

可選引數可以是命名引數或者位置引數,但乙個引數只能選擇其中一種方式修飾。

命名可選引數

呼叫函式時,可以使用指定命名引數paramname: value。 例如:

enableflags(bold: true, hidden: false);定義函式是,使用來指定命名引數:

示例:大括號中的就是命名可選引數,需要的時候指定即可。

位置可選引數

將引數放到中來標記引數是可選的:

string say(string from, string msg, [string device]) 

return result;

}

不使用可選引數呼叫上面方法 的示例:

assert(say('bob', 'howdy') == 'bob says howdy');
使用可選引數呼叫上面方法的示例:

assert(say('bob', 'howdy', 'smoke signal') ==

'bob says howdy with a smoke signal');

預設引數值

在定義方法的時候,可以使用=來定義可選引數的預設值。 預設值只能是編譯時常量。 如果沒有提供預設值,則預設值為null

設定可選引數預設值示例:

/// 設定 [bold] 和 [hidden] 標誌 ...

void enableflags()

// bold 值為 true; hidden 值為 false.

enableflags(bold: true);

下面示例演示了如何為位置引數設定預設值:

string say(string from, string msg,

[string device = 'carrier pigeon', string mood])

if (mood != null)

return result;

}assert(say('bob', 'howdy') ==

'bob says howdy with a carrier pigeon');

list 或 map 可以作為預設值傳遞。

void dostuff(

})

任何應用都必須有乙個頂級 main() 函式,作為應用服務的入口。 main() 函式返回值為空,引數為乙個可選的 list 。

乙個函式可以作為另乙個函式的引數。例如:

void printelement(int element) 

var list = [1, 2, 3];

// 將 printelement 函式作為引數傳遞。

list.foreach(printelement);

同樣可以將乙個函式賦值給乙個變數,例如:

var loudify = (msg) => '!!! $ !!!';

assert(loudify('hello') == '!!! hello !!!');

沒有名字的函式,這種函式被稱為 匿名函式, 有時候也被稱為lambda或者closure

下面例子中定義了乙個包含乙個無型別引數 item 的匿名函式。 list 中的每個元素都會呼叫這個函式,列印元素位置和值的字串。

list.foreach((item) : $item');

});輸出:

1: bananas

2: oranges

如果函式只有一條語句, 可以使用箭頭簡寫。

list.foreach(

(item) => print('$: $item'));

dart 支援常用的運算子示例:

assert(2 + 3 == 5);

assert(2 - 3 == -1);

assert(2 * 3 == 6);

assert(5 / 2 == 2.5); // 結果是雙浮點型

assert(5 ~/ 2 == 2); // 結果是整型

assert(5 % 2 == 1); // 餘數

assert('5/2 = $ r $' == '5/2 = 2 r 1');

dart 還支援字首和字尾,自增和自減運算子。示例:

var a, b;

a = 0;

b = ++a; // a自加後賦值給b。

assert(a == b); // 1 == 1

a = 0;

b = a++; // a先賦值給b後,a自加。

assert(a != b); // 1 != 0

a = 0;

b = --a; // a自減後賦值給b。

assert(a == b); // -1 == -1

a = 0;

b = a--; // a先賦值給b後,a自減。

assert(a != b); // -1 != 0

要測試兩個物件x和y是否表示相同的事物, 使用 == 運算子。 (在極少數情況下, 要確定兩個物件是否完全相同,需要使用identical()函式。)

示例:

assert(2 == 2);

assert(2 != 3);

assert(3 > 2);

assert(2 < 3);

assert(3 >= 3);

assert(2 <= 3);

as, is, 和 is!運算子用於在執行時處理型別檢查。

使用 as 運算子將物件強制轉換為特定型別。 通常,可以認為是 is 型別判定後,被判定物件呼叫函式的一種縮寫形式。

if (emp is person)
使用 as 運算子進行縮寫:

(emp as person).firstname = 'bob';
使用 = 為變數賦值。 使用 ??= 運算子時,只有當被賦值的變數為 null 時才會賦值給它。

// 將值賦值給變數a

a = value;

// 如果b為空時,將變數賦值給b,否則,b的值保持不變。

b ??= value;

dart有兩個運算子,有時可以替換 if-else 表示式, 讓表示式更簡潔:

var visibility = ispublic ? 'public' : 'private';
string playername(string name) => name ?? 'guest';
級聯運算子 (…) 可以實現對同乙個對像進行一系列的操作。 除了呼叫函式, 還可以訪問同一物件上的字段屬性。

queryselector('#confirm') // 獲取物件。

..text = 'confirm' // 呼叫成員變數。

..classes.add('important')

..onclick.listen((e) => window.alert('confirmed!'));

上面的**等價於:

var button = queryselector('#confirm');

button.text = 'confirm';

button.classes.add('important');

button.onclick.listen((e) => window.alert('confirmed!'));

基礎運算子及筆記

如果 username tank ture,否則為false and 左右兩邊的條件都為ture 否則為false password 1,2,3 ture print 1 1 2 n1 n1 1 n1 1 print n1 2 is 比較兩個變數的id是否相等 x 10 print id x id ...

JS筆記 運算子 函式

將數字轉換為二進位制後進行運算 只做整數運算,如果是小數的話,則去掉小數字再運算 2 位運算 1 按位 與 語法 a b 2 按位 或 語法 a b 任何場合 任何小數與0做按位或的操作,可以快速轉換為整數 並四捨五入 3 按位 異或 語法 a b 1 賦值運算子 2 擴充套件賦值運算子 3 條件運...

基本運算子 邏輯運算子 位運算子等 學習筆記

冪運算 2 3 double pow math.pow 2,3 冪運算 boolean a true boolean b false system.out.println a b a b 邏輯與運算 兩個變數都為真,結果才為true system.out.println a b a b 邏輯或運算 ...