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

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

2011年10月10日的GOTO大會上,Google的兩位工程師發布了「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.)

公眾號