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); //安全
}