久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Dart核心語言基礎(chǔ)const關(guān)鍵字與final關(guān)鍵字的區(qū)別

 程序員讀書空間 2022-11-17 發(fā)布于浙江

題記:不到最后時刻,,千萬別輕言放棄,,無論結(jié)局成功與否,,只要你拼博過,,盡力過,,一切問心無愧


本文描述 Dart 中 const 關(guān)鍵字與 final 關(guān)鍵字的基本使用知識點(diǎn)以及對比區(qū)別

本文章首發(fā)于微信公眾號(biglead) 我的大前端生涯 ,,同步刊登各技術(shù)論壇,。


1 const 、final 使用場景

1.1 final

final 用來修飾變量 只能被賦值一次,,在運(yùn)行時賦值,,所謂運(yùn)行時 就是當(dāng)程序執(zhí)行到這塊代碼時才會對final 修飾的變量進(jìn)行賦值。

應(yīng)用場景一如下圖所示,,當(dāng) final 使用在類中時,,在聲明變量時,你必須對其初始化賦值

當(dāng) final 運(yùn)用在 StatefulWidget 中時,,用來修飾變量時:

這種情況使用 final 修飾的變量看似沒有進(jìn)行初始化賦值,,但是不違背 final 修飾的變量在運(yùn)行時賦值的理解,因為只有當(dāng)定義的 StatefulWidget 被初始化使用時,,這里 final 修飾的變量才會被賦值,當(dāng)然也是賦值一次,。

所以結(jié)論是 :final 可用來修飾變量,,修飾的變量在運(yùn)行時被賦值,只可被賦值一次,,所以修飾的變量內(nèi)容也稱為常量,。

核心思想是:運(yùn)行時賦值,、只能被賦值一次


1.2 const 的使用場景

const 可用來修飾變量、修飾常量構(gòu)造函數(shù),,修飾的變量只可被賦值一次,。

const 可用來修飾的變量只可賦值一次,const 修飾的變量會在編譯器以至于應(yīng)用整個生命周期內(nèi)都是不可變的常量,,在內(nèi)存中也只會創(chuàng)建一次,,之后的每次調(diào)用都會復(fù)用第一次創(chuàng)建的對象。

///全局常量 聲明const String name = "張三";
class TestPage2 {
///類常量 規(guī)范要求必須使用 static 修飾 static const String name = "張三";
void test(){ ///方法塊常量 const String name = "張三";  }}

const 可用來修飾常量構(gòu)造函數(shù),,常用于定義枚舉類型,,如下代碼清單 1-2-1 所示

/// 代碼清單 1-2-1 ///訂單類型 class OrderStatus {
static const OrderStatus notDeliver = const OrderStatus("待發(fā)貨",1); static const OrderStatus hasBeenShipped = const OrderStatus("已發(fā)貨",2); static const OrderStatus haveTheGoods = const OrderStatus("已收貨",2); const OrderStatus(this.statusName,this.statusNumber);
final String statusName; final int statusNumber;}

使用如下 代碼清單 1-2-2 所示

///  代碼清單 1-2-2class TestClass5{
///判斷訂單類型 void test(OrderStatus orderStatus){
switch (orderStatus) { case OrderStatus.notDeliver: break; case OrderStatus.hasBeenShipped: break; case OrderStatus.haveTheGoods: break; default: break; } }

2 final 與 const 的不同點(diǎn)

2.1 final 與 const 修飾的變量取值時機(jī)不同

所謂取值時機(jī)不同,指的是 const 修飾的變量是在編譯時已確定下來的值,,而 final 修飾的變量是在運(yùn)行時才確定下來的,。

const 修飾的變量是在編譯期,程序運(yùn)行前就有確定值,。

使用 const 修飾的常量的值,,必須由可在編譯時可計算出結(jié)果的。對于在運(yùn)行時需要獲取的值是不可修飾的,,如下圖所示:

2.2 應(yīng)用范疇不同

final 只可用來修飾變量,,
const 關(guān)鍵字即可修飾變量也可用來修飾 常量構(gòu)造函數(shù) 

2.3 相同內(nèi)容對象創(chuàng)建不同

如下代碼清單 2-3-1 ,雖然創(chuàng)建了兩個對象list1和list2,,但是內(nèi)容一致且都是const對象,,所以其指向的是同一對象:

  ///  代碼清單 2-3-1  ///單元測試  test(" 測試1 ", () {        const List<int> list1 = [1, 2, 3];    const List<int> list2 = [1, 2, 3];
// 輸出結(jié)果為true 比較的是指針指向 print(list1 == list2);
// 輸出結(jié)果為true 比較指針指向同時也比較內(nèi)容 print(identical(list1, list2));
});

如下代碼清單 2-3-2 ,final聲明的變量,,即使內(nèi)容相同,,也是重新創(chuàng)建新的對象:

  ///  代碼清單 2-3-2  ///單元測試  test(" 測試2 ", () {    final List<int> list1 = [1, 2, 3];    final List<int>  list2 = [1, 2, 3];
// 輸出結(jié)果為false 比較的是指針指向 print(list1 == list2);
// 輸出結(jié)果為false 比較指針指向同時也比較內(nèi)容 print(identical(list1, list2));

});

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多