類型
1.記錄(Record)
1. 記錄的基本語法
在 Dart 中汰聋,記錄使用圓括號 () 進(jìn)行聲明门粪,內(nèi)部可以包含多個(gè)值,類似于元組烹困。記錄的字段可以是 位置字段或 命名字段玄妈,位置字段按順序存儲,而命名字段則可以通過名字訪問髓梅。
1.1 位置字段記錄
位置字段記錄類似于一個(gè)固定長度的數(shù)組拟蜻,通過位置(索引)訪問每個(gè)元素。
void main() {
var record = (1, 'Dart', true);
print(record); // 輸出:(1, Dart, true)
// 訪問位置字段
print(record.$1); // 輸出:1
print(record.$2); // 輸出:Dart
print(record.$3); // 輸出:true
}
在這個(gè)示例中枯饿,record 是一個(gè)包含三個(gè)字段的記錄酝锅,字段可以通過 2奢方、1 開始
1.2 命名字段記錄
命名字段記錄允許為每個(gè)字段提供一個(gè)名稱,從而提高代碼的可讀性蟋字。
void main() {
var person = (name: 'Alice', age: 30, isStudent: false);
// 訪問命名字段
print(person.name); // 輸出:Alice
print(person.age); // 輸出:30
print(person.isStudent); // 輸出:false
}
在此示例中阁谆,person 記錄的每個(gè)字段都有一個(gè)明確的名稱,允許通過字段名稱來訪問值愉老。
1.3 混合位置字段和命名字段
記錄還支持位置字段和命名字段的混合使用。你可以同時(shí)定義位置字段和命名字段剖效。
void main() {
var mixedRecord = (1, 'Dart', isCool: true);
// 訪問位置字段
print(mixedRecord.$1); // 輸出:1
print(mixedRecord.$2); // 輸出:Dart
// 訪問命名字段
print(mixedRecord.isCool); // 輸出:true
}
2. 記錄的類型推斷與聲明
Dart 可以自動(dòng)推斷記錄的類型嫉入,或者你也可以顯式聲明記錄的類型。對于位置字段璧尸,使用括號括住字段的類型咒林;對于命名字段,使用大括號括住字段名稱和類型爷光。
void main() {
// 類型推斷
var record = (1, 'Dart');
// 顯式聲明記錄類型
(int, String) typedRecord = (1, 'Dart');
// 顯式聲明帶命名字段的記錄類型
({int age, String name}) person = (age: 30, name: 'Alice');
print(record); // 輸出:(1, Dart)
print(typedRecord); // 輸出:(1, Dart)
print(person); // 輸出:(age: 30, name: Alice)
}
3. 記錄的解構(gòu)
Dart 支持記錄的解構(gòu)垫竞,可以將記錄中的字段解構(gòu)為單獨(dú)的變量。
void main() {
var (id, name, isActive) = (1, 'Dart', true);
print(id); // 輸出:1
print(name); // 輸出:Dart
print(isActive); // 輸出:true
}
解構(gòu)使得我們可以直接從記錄中提取值并賦給單獨(dú)的變量,增強(qiáng)了代碼的簡潔性欢瞪。
4. 記錄的比較
記錄支持值比較(而不是引用比較)活烙。即兩個(gè)包含相同值的記錄被認(rèn)為是相等的,即使它們不是同一個(gè)實(shí)例遣鼓。
void main() {
var record1 = (1, 'Dart');
var record2 = (1, 'Dart');
print(record1 == record2); // 輸出:true
}
5. 記錄的用途
臨時(shí)數(shù)據(jù)結(jié)構(gòu):記錄適合用來臨時(shí)存儲一組相關(guān)的數(shù)據(jù)啸盏,而無需定義一個(gè)類。
函數(shù)返回值:記錄可以用來作為函數(shù)的返回值骑祟,特別是在需要返回多個(gè)值時(shí)回懦。
減少代碼冗余:使用記錄可以減少代碼中不必要的類定義,簡化代碼邏輯次企。
6. 記錄的限制
不可變:記錄中的字段是不可變的怯晕,一旦創(chuàng)建不能修改。如果需要修改某個(gè)字段的值缸棵,需要?jiǎng)?chuàng)建一個(gè)新的記錄舟茶。
沒有方法或?qū)傩裕河涗泝H僅是用于存儲數(shù)據(jù)的結(jié)構(gòu),不能像類一樣包含方法或其他復(fù)雜的邏輯蛉谜。