Flutter

 · 2 mins read

Dart

Dart提供了多種內建類型。

數字(Numbers)

int: 整數,例如42

int age = 30;
double pi = 3.14;

字串(Strings)

String name = 'Mike';
String greeting = "Hello, Mike";

布林值(Booleans)

用來表示true或false

會跟if語句一起用

bool isAdult = true'

列表(Lists)

有序的集合,可透過index查詢列表裡的內容

List<int> numbers = [1, 2, 3, 4, 5];

asert(fruits[0] == 1);

集合(Sets)

與Lists類似,但Set是無序集合,且不會存在重複元素

Set<String> uniqueNames = {'Alice', 'Bob', "Mike"};

assert(ingredients.contains('titanium'));

映射(Maps)

鍵值對集合

Map<String, int> ages = {
  'Mike': 20,
  'Phil': 22,
  'Easy': 30,
};
assert(ages['Mike']==20);

空值(Null)

表示缺少值,可以為空

int? nullableNumber = null;

變數與類型

類型判斷是Dart提高程式碼簡潔興和開發效率的機制。透過var關鍵字,Dart能夠自動判斷變數類型,減少多餘的類型宣告。

var保留字

var name = "Mike";
var age = 30;

var可以讓程式碼更整潔,也保持類型安全。

明確的類型宣告

當想要明確指定類型時,可以直接用類型名,但大多數是不建議的。如果他的類型可以從被賦值時推斷出來,官方建議使用var。

String country = "Taipei";
int population = 2300;

dynamic和Object

這兩個類型都可以包含任意的值,但有些差異:

dynamic

1.是Dart的特殊類型

2.預設「禁用類型檢查」,變數可以是任意類型的值,並在編譯時和運行時都不會觸發檢查

3.適合在需要大量靈活性且不確定變數型別時使用,可以能增加錯誤風險

Object

1.是Dart中所有類型的共同基礎、父類別,支援編譯期間執行類型檢查

2.適用於類型檢查設計,並可以安全地使用通用方法

dymatic x = "Hi";
x = 100;

object y = "world";
y = 2000;

dynamic更靈活但less safe,而Object提供一些編譯時的類型檢查,如果使用類型所自帶的方法會出錯:

Object x = "world";
print(x.isEmpty); //錯誤

dynamic y = "world"
print(y.isEmpty); //成功

var z = "world";
print(y.isEmpty); //成功

final和const

用於宣告不可變的變數,這個程式碼的變數是不會被更改的,可以宣告為const或final,這樣不僅幫助確認變數不該被修改,且有助於Flutter減少記憶體浪費:

final pi = 3.14159;
pi = 3.14 //錯誤: final變數不能重新賦值

const gravity = 9.8;
gravity = 10; //錯誤: const變數是編譯時常數

final可以在運行時賦值一次,而const必須在編譯時就確定值。

空安全(Null Safety)

為了減少錯誤改善開發品質,Dart引入了空安全特性,在編譯錢就可以幫抓出是否安全。

String nonNullable = "This is be null";
String? nullable = null; //可為null

int? nullableNumber;
print(nullableNumber + 5); //會提示錯誤:須先檢查是否為null

if (nullableNumber != null) {
  print(nullableNumber + 5); //安全
}