Dart_基礎(chǔ)_變量和函數(shù)

變量

創(chuàng)建一個(gè)變量并進(jìn)行初始化:

var name = 'Bob';//此時(shí)這里的變量是 name 存儲(chǔ)了一個(gè) String 類型的對(duì)象引用

name 變量的類型被推斷為 String 洪唐。 但是也可以通過指定類型的方式,來改變變量類型喊括。 如果對(duì)象不限定為單個(gè)類型祟峦,可以指定為 對(duì)象類型動(dòng)態(tài)類型

dynamic name = 'Bob';// 動(dòng)態(tài)類型 運(yùn)行時(shí)推斷類型
var name = 'Bob';// 自動(dòng)推斷
String name = 'Bob';// 顯式聲明

默認(rèn)值

未初始化的變量默認(rèn)值是 null苍日。即使變量是數(shù)字 類型默認(rèn)值也是 null相恃,因?yàn)樵?Dart 中一切都是對(duì)象耕腾,數(shù)字類型 也不例外。

常量

使用過程中從來不會(huì)被修改的變量, 可以使用 finalconst, 而不是 var 或者其他類型疗琉, Final 變量的值只能被設(shè)置一次盈简; Const 變量在編譯時(shí)就已經(jīng)固定 (Const 變量 是隱式 Final 的類型.) 最高級(jí) final 變量或類變量在第一次使用時(shí)被初始化香浩。

final

創(chuàng)建和設(shè)置一個(gè) Final 變量:

final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';
name = 'Alice'; // Error: 一個(gè) final 變量只能被設(shè)置一次。

const

如果需要在編譯時(shí)就固定變量的值,可以使用 const 類型變量速缆。 如果 Const 變量是類級(jí)別的幢尚,需要標(biāo)記為 static const真慢。 在這些地方可以使用在編譯時(shí)就已經(jīng)固定不變的值,字面量的數(shù)字和字符串朗鸠, 固定的變量,或者是用于計(jì)算的固定數(shù)字:

const bar = 1000000; // 壓力單位 (dynes/cm2)
const double atm = 1.01325 * bar; // 標(biāo)準(zhǔn)氣壓
//Const 關(guān)鍵字不僅可以用于聲明常量變量。 還可以用來創(chuàng)建常量值,以及聲明創(chuàng)建常量值的構(gòu)造函數(shù)沼沈。 任何變量都可以擁有常量值。
var foo = const [];
final bar = const [];
const baz = []; // Equivalent to `const []`

foo = [1, 2, 3]; // 曾經(jīng)引用過 const [] 常量值页衙。
baz = [42]; // Error: 常量變量不能賦值修改呻袭。

函數(shù)

一般函數(shù)

bool isNoble(int atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}
//如果函數(shù)中只有一句表達(dá)式,可以使用簡寫語法
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;

可選參數(shù)

函數(shù)方法的可選參數(shù)通過在參數(shù)列表中用 {} 指定段誊,例如:

void say(String name, {String word = 'hello'}){
    print('$name say $word');
  }

// 通過(可選參數(shù)名 + :)進(jìn)行可選參數(shù)的賦值
main(){
    say('kuky', word: 'Hello World'); // kuky say Hello World
}

參數(shù)默認(rèn)值

認(rèn)值只能是編譯時(shí)常量烟瞧。 如果沒有提供默認(rèn)值强岸,則默認(rèn)值為 null。

/// 設(shè)置 [bold] 和 [hidden] 標(biāo)志 ...
void enableFlags({bool bold = false, bool hidden = false}) {...}

// bold 值為 true; hidden 值為 false.
enableFlags(bold: true);

可變參數(shù)

將參數(shù)放到 [] 中來標(biāo)記參數(shù)是可變的:

String say(String from, String msg, [String device]) {
  var result = '$from says $msg';
  if (device != null) {
    result = '$result with a $device';
  }
  return result;
}

assert(say('Bob', 'Howdy') == 'Bob says Howdy');
assert(say('Bob', 'Howdy', 'smoke signal') ==
    'Bob says Howdy with a smoke signal');

Main() 函數(shù)

main() 函數(shù)是應(yīng)用的的頂級(jí)函數(shù)弹沽,作為應(yīng)用服務(wù)的入口策橘。 main() 函數(shù)返回值為空炸渡,參數(shù)為一個(gè)可選的 List

void main() {
  //入口
}

函數(shù)也是對(duì)象

一個(gè)函數(shù)可以作為另一個(gè)函數(shù)的參數(shù)。 例如:

void printElement(int element) {
  print(element);
}

var list = [1, 2, 3];

// 將 printElement 函數(shù)作為參數(shù)傳遞丽已。
list.forEach(printElement);

也可以將一個(gè)函數(shù)值賦值給一個(gè)變量:

var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';
assert(loudify('hello') == '!!! HELLO !!!');

匿名函數(shù)

創(chuàng)建沒有名字的函數(shù)蚌堵,這種函數(shù)被稱為 匿名函數(shù), 有時(shí)候也被稱為 lambda 或者 closure 沛婴。 匿名函數(shù)可以賦值到一個(gè)變量中吼畏, 舉個(gè)例子,在一個(gè)集合中可以添加或者刪除一個(gè)匿名函數(shù)瘸味。

匿名函數(shù)和命名函數(shù)看起來類似— 在括號(hào)之間可以定義一些參數(shù)或可選參數(shù)宫仗,參數(shù)使用逗號(hào)分割。

var list = ['apples', 'bananas', 'oranges'];
list.forEach((item) {
  print('${list.indexOf(item)}: $item');
});
//如果函數(shù)只有一條語句旁仿, 可以使用箭頭簡寫藕夫。
list.forEach(
    (item) => print('${list.indexOf(item)}: $item'));

作用域

Dart 支持多個(gè)嵌套函數(shù)的變量作用域:

bool topLevel = true;

void main() {
  var insideMain = true;

  void myFunction() {
    var insideFunction = true;

    void nestedFunction() {
      var insideNestedFunction = true;

      assert(topLevel);
      assert(insideMain);
      assert(insideFunction);
      assert(insideNestedFunction);
    }
  }
}

注意 nestedFunction() 可以訪問所有的變量, 一直到頂級(jí)作用域變量

閉包

閉包 即一個(gè)函數(shù)對(duì)象枯冈,即使函數(shù)對(duì)象的調(diào)用在它原始作用域之外毅贮, 依然能夠訪問在它詞法作用域內(nèi)的變量。

/// 返回一個(gè)函數(shù)尘奏,返回的函數(shù)參數(shù)與 [addBy] 相加滩褥。
Function makeAdder(num addBy) {
  return (num i) => addBy + i;
}

void main() {
  // 創(chuàng)建一個(gè)加 2 的函數(shù)。
  var add2 = makeAdder(2);

  // 創(chuàng)建一個(gè)加 4 的函數(shù)炫加。
  var add4 = makeAdder(4);

  assert(add2(3) == 5);
  assert(add4(3) == 7);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瑰煎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子俗孝,更是在濱河造成了極大的恐慌酒甸,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赋铝,死亡現(xiàn)場離奇詭異插勤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)革骨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門农尖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人良哲,你說我怎么就攤上這事盛卡。” “怎么了筑凫?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵滑沧,是天一觀的道長喇颁。 經(jīng)常有香客問我,道長嚎货,這世上最難降的妖魔是什么橘霎? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮殖属,結(jié)果婚禮上姐叁,老公的妹妹穿的比我還像新娘。我一直安慰自己洗显,他們只是感情好外潜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挠唆,像睡著了一般处窥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上玄组,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天滔驾,我揣著相機(jī)與錄音,去河邊找鬼俄讹。 笑死哆致,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的患膛。 我是一名探鬼主播摊阀,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼踪蹬!你這毒婦竟也來了胞此?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤跃捣,失蹤者是張志新(化名)和其女友劉穎漱牵,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枝缔,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡布疙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蚊惯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了愿卸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡截型,死狀恐怖趴荸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宦焦,我是刑警寧澤发钝,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布顿涣,位于F島的核電站,受9級(jí)特大地震影響酝豪,放射性物質(zhì)發(fā)生泄漏涛碑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一孵淘、第九天 我趴在偏房一處隱蔽的房頂上張望蒲障。 院中可真熱鬧,春花似錦瘫证、人聲如沸揉阎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毙籽。三九已至,卻和暖如春毡庆,著一層夾襖步出監(jiān)牢的瞬間坑赡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工么抗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垮衷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓乖坠,卻偏偏與公主長得像搀突,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熊泵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容