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 邏輯或運算 ...