1. 程式人生 > >【Flutter 1-7】Flutter教程Dart語言——變數

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

作者 | 弗拉德 來源 | 弗拉德(公眾號:fulade_me) > 2011年10月10日的GOTO大會上,谷歌的兩位工程師釋出了“Dart”;Dart是一種全新的程式語言,旨在幫助開發者構建Web應用程式。Dart 1.0於2013年11月14日釋出。我們日常開發Flutter使用的就是Dart語言,所以我們有必要了解一下Dart語言的使用方法。 [文章首發地址](http://fulade.me/dart-variable-1-7.html) #### **型別安全的語言** 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' }; ``` #### **變數** 下面的示例程式碼將建立一個變數並將其初始化: ``` Dart var name = 'Fulade'; ``` **變數僅儲存物件的引用。** 這裡名為 name 的變數儲存了一個 `String` 型別物件的引用,`'Fulade'` 則是該物件的值。 `name` 變數的型別被推斷為 `String`,但是你可以為其指定型別。 如果一個物件的引用不侷限於單一的型別,可以將其指定為 `Object` 或 `dynamic` 型別。 ``` Dart dynamic name = 'Bob'; ``` 除此之外你也可以指定型別: ``` Dart String name = 'Bob'; ``` #### **預設值** 在 Dart 中,未初始化的變數擁有一個預設的初始化值:`null`。即便數字也是如此,因為在 Dart 中一切皆為物件,數字也不例外。 ``` Dart int lineCount; if(lineCount == null) { print("line is null"); } ``` ##### **Final 和 Const** 如果你不想更改一個變數,可以使用關鍵字 `final` 或者 `const` 修飾變數,這兩個關鍵字可以替代 `var` 關鍵字或者加在一個具體的型別前。一個 `final` 變數只可以被賦值一次;一個 `const` 變數是一個編譯時常量(`const` 變數同時也是 `final`)。被`final`修飾的變數在第一次使用的時候被初始化。 下面的示例中我們建立並設定兩個 `final` 變數: ``` Dart final name = 'Bob'; // Without a type annotation final String nickname = 'Bobby'; ``` 你不能修改一個 `final` 變數的值: ``` Dart name = 'Alice'; // Error: a final variable can only be set once. ``` 使用關鍵字 `const` 修飾變量表示該變數為 **編譯時常量**。如果使用 `const` 修飾類中的變數,則必須加上 `static` 關鍵字,即 `static const`(注意:順序不能顛倒。在宣告 `const` 變數時可以直接為其賦值,也可以使用其它的 `const` 變數為其賦值: ```Dart const bar = 1000000; // 直接賦值 [Unit of pressure (dynes/cm2)] const double atm = 1.01325 * bar; // 利用其它 const 變數賦值 (Standard atmosphere) ``` `const` 關鍵字不僅僅可以用來定義常量,還可以用來建立常量值,該常量值可以賦予給任何變數。你也可以將建構函式宣告為 `const` 的,這種型別的建構函式建立的物件是不可改變的。 ``` Dart var foo = const []; final bar = const []; const baz = []; // 相當於 `const []` (Equivalent to `const []`) ``` 如果使用初始化表示式為常量賦值可以省略掉關鍵字 `const`,比如上面的常量 `baz` 的賦值就省略掉了 `const`沒有使用 `final` 或 `const` 修飾的變數的值是可以被更改的,即使這些變數之前引用過 `const` 的值。 ``` Dart foo = [1, 2, 3]; // foo 的值之前為 const [] (Was const []) ``` 常量的值不可以被修改: ``` Dart baz = [42]; // 報錯:常量不可以被賦值。(Error: Constant variables can't be assigned a value.) ``` *** ![公眾號](https://cdn.jsdelivr.net/gh/johnson8888/blog_pages/images/page_foo