【Flutter 1-7】Flutter教程Dart語言——變數

弗拉德發表於2020-11-16

作者 | 弗拉德
來源 | 弗拉德(公眾號:fulade_me)

2011年10月10日的GOTO大會上,谷歌的兩位工程師釋出了“Dart”;Dart是一種全新的程式語言,旨在幫助開發者構建Web應用程式。Dart 1.0於2013年11月14日釋出。我們日常開發Flutter使用的就是Dart語言,所以我們有必要了解一下Dart語言的使用方法。

文章首發地址

型別安全的語言

Dart 語言是型別安全的語言,但是由於其支援型別推斷,因此大多數變數不需要顯式地指定型別:
例如

/// 初始化一個字串
var name = 'Fulade';
/// Int型別
var year = 1995;
/// 浮點數型別
var antennaDiameter = 3.7;
/// 陣列
var list = ['Java', 'Python', 'C++', 'C'];
/// 字典型別
var image = {
  'tags': ['土星'],
  'url': '//path/to/saturn.jpg'
};

變數

下面的示例程式碼將建立一個變數並將其初始化:

var name = 'Fulade';

變數僅儲存物件的引用。
這裡名為 name 的變數儲存了一個 String 型別物件的引用,'Fulade' 則是該物件的值。
name 變數的型別被推斷為 String,但是你可以為其指定型別。
如果一個物件的引用不侷限於單一的型別,可以將其指定為 Objectdynamic 型別。

dynamic name = 'Bob';

除此之外你也可以指定型別:

String name = 'Bob';

預設值

在 Dart 中,未初始化的變數擁有一個預設的初始化值:null。即便數字也是如此,因為在 Dart 中一切皆為物件,數字也不例外。

int lineCount;
if(lineCount == null) {
    print("line is null");
}
Final 和 Const

如果你不想更改一個變數,可以使用關鍵字 final 或者 const 修飾變數,這兩個關鍵字可以替代 var 關鍵字或者加在一個具體的型別前。一個 final 變數只可以被賦值一次;一個 const 變數是一個編譯時常量(const 變數同時也是 final)。被final修飾的變數在第一次使用的時候被初始化。
下面的示例中我們建立並設定兩個 final 變數:

final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';

你不能修改一個 final 變數的值:

name = 'Alice'; // Error: a final variable can only be set once.

使用關鍵字 const 修飾變數表示該變數為 編譯時常量。如果使用 const 修飾類中的變數,則必須加上 static 關鍵字,即 static const(注意:順序不能顛倒。在宣告 const 變數時可以直接為其賦值,也可以使用其它的 const 變數為其賦值:

const bar = 1000000; // 直接賦值 [Unit of pressure (dynes/cm2)]
const double atm = 1.01325 * bar; // 利用其它 const 變數賦值 (Standard atmosphere)

const 關鍵字不僅僅可以用來定義常量,還可以用來建立常量值,該常量值可以賦予給任何變數。你也可以將建構函式宣告為 const 的,這種型別的建構函式建立的物件是不可改變的。

var foo = const [];
final bar = const [];
const baz = []; // 相當於 `const []` (Equivalent to `const []`)

如果使用初始化表示式為常量賦值可以省略掉關鍵字 const,比如上面的常量 baz 的賦值就省略掉了 const沒有使用 finalconst 修飾的變數的值是可以被更改的,即使這些變數之前引用過 const 的值。

foo = [1, 2, 3]; // foo 的值之前為 const [] (Was const [])

常量的值不可以被修改:

baz = [42]; // 報錯:常量不可以被賦值。(Error: Constant variables can't be assigned a value.)

公眾號

相關文章