【從零開始學 Dart 程式設計】變數與常數

【從零開始學 Dart 程式設計】線上教學課程目錄 ,Flutter 先修班, Dart 程式語言基礎入門課程。

變數與常數

  • 變數
    變動值,可以隨時動態存進去資料值。可以把他想像成開放式的櫃子,可以隨時存放東西

  • 常數
    固定值,不希望事後變動此資料,可以使用此種型態。可以把他想像成當資料放進去後,系統就把這個櫃子上鎖,不允許在放資料進去。

變數

程式語法

//宣告定義變數
var 變數名稱;

// 指定資料值給該變數,Dart 將會根據指定資料值自動推資料型態
變數名稱 =;

//寫成一行並指定資料值
資料型態 變數名稱 =;

變數若沒有賦予初值,預設值為 null

變數命名規則

變數命名規則,跟 Dart 保留關鍵字,不用刻意去背,因為 IDE 會提示錯誤

  1. 不能與 Dart 保留字相同,可參考下方表格。
  2. 字首,第一個字,不能是數字
  3. 字首,第一個字,可以是底線_。注意:如果為底線_開頭,標示在 lib 表示私有的變數。
  4. Dart 有區分大小寫,大小寫英文字母,視為不同變數
  5. 一個英文單字全小寫,多個單字組成首字小寫,第二個英文字以後首字大寫,如:myName, defaultValue , totalPage。(非必要,但建議的 Code Style)
  6. var 交給 Dart 自動推斷資料類型,Dart 官方建議用在區域變數。全域變數建議使用定義明確的資料類型。所以KT建議保險起見還是明確定義資料類型,IDE 智慧化提示很強,實在沒必要少打幾個字卻可能冒著可能會出錯的風險,安全第一。(非必要,但建議的 Code Style)

Dart 保留關鍵字

abstractcontinuefalsenewthis
asdefaultfinalnullthrow
assertdeferredfinallyoperatortrue
asyncdoforparttry
asyncdynamicgetrethrowtypedef
awaitelseifreturnvar
breakenumimplementssetvoid
caseexportimportstaticwhile
catchexternalinsuperwith
classextendsisswitchyield
constfactorylibrarysyncyield

實際範例

//分成兩行,範例:
var i;
i =66;

//寫成一行,範例:
var j =88;

//寫成一行,範例:
int k =168;

//新版 Dart 語法 (2.12 之後版本),可以透過 print 列印語法,將存放在 i 、 j 和K箱子裡面的資料印出來
print("i: $i");
print("j: $j");
print("k: $k");

執行結果:

i: 66
j: 88
k: 168

注意的事,要將存放在 i 、 j 和K箱子裡面的資料印出來,重要的關鍵點是要在變數前面加入錢的符號「$」,如果沒有刻意加錢的符號,只會印出固定死的文字。

print("i: i");
print("j: jjj");
print("k: kkkkkk");

執行結果:

i: i
j: jjj
k: kkkkkk

而變數可以重覆塞值進去,最後存進去的資料會覆蓋之前存放的資料

int i =168;
i = 99;
print("i: $i");

執行結果:

i: 99

常數

與變數差別,最前方加入了 final 或 const 宣告為常數,賦值一次後,不能再修改變更,否則會報錯。另外常數宣告的 code style 建議會將常數名稱使用 lowerCamelCase 小駱駝峰式命名。如:maxValue, requestActionCode。

範例

final i = 100;
const y = 66;

常數只能定義一次資料值,我們刻意去犯錯,重覆去塞資料到 i 常數值裡面去,IntelliJ IDEA 就會很聰明的智慧提示,在第二次定義的 i ,下方畫上紅色蚯蚓線,滑鼠鼠標,移動到紅色蚯蚓線下方, IntelliJ IDEA 就會跑出,錯誤原因來說明:「‘i’, a final variable, can only be set once.」,就是 final 型態不能重覆塞值。

若這時我們假裝刻意沒看到,堅持要執行(Run ‘main.dart’),執行後的結果也會在資訊視窗中顯示錯誤訊息,此訊息會指出是哪一個檔案、哪一行發生錯誤。你會發現 IntelliJ IDEA 很聰明,不用執行後才跟你說錯誤,在寫錯的當下,就會把有錯誤的檔案與行數用紅色蚯蚓線,標明錯誤。

final 與 const 差異比較

const 必須一開始編譯之前就是明確的資料值,不允許定義是編譯後運算後得到的值。final 可以定義是運算後得到的值。const 比 final 還要嚴格。

範例

int getResult() {
  return 66;
}

void main() {
  final int i = getResult(); //正確
  const int j = getResult(); //錯誤
}

那這次的課程就介紹到這邊囉~

順帶一提,KT 線上教室,臉書粉絲團,會不定期發佈相關資訊,不想錯過最新資訊,不要忘記來按讚,加追蹤喔!也歡迎大家將這套課程分享給更多人喔。

我們下次再見囉!!!掰掰~

參考資料

A tour of the Dart language
https://dart.dev/guides/language/language-tour