# Dart基礎
## Dart的構造方法可選和必填
在 Dart 中,構造函數參數使用 `()` 和 `{}` 的組合是一種設計選擇,旨在提高代碼的可讀性和靈活性。具體來說,`()` 是用于定義普通的必選參數,而 `{}` 用于定義命名參數(named parameters),這些參數是可選的,并且在調用構造函數時可以按任意順序傳遞。
### 必選參數和可選命名參數
1. **必選參數**:
* 定義在 `()` 中,調用構造函數時必須傳遞這些參數。
* 順序是固定的。
2. **可選命名參數**:
* 定義在 `{}` 中,調用構造函數時可以選擇性地傳遞這些參數。
* 順序是靈活的,可以使用參數名進行傳遞,增強了代碼的可讀性。
```dart
class MyClass {
final String name;
final int age;
final String? city;
// 構造函數,name 和 age 是必選參數,city 是可選命名參數
MyClass(this.name, this.age, {this.city});
}
void main() {
// 使用必選參數
var person1 = MyClass('Alice', 30);
// 使用必選參數和可選命名參數
var person2 = MyClass('Bob', 25, city: 'New York');
print(person1.name); // Alice
print(person2.city); // New York
}
```
### 為什么使用命名參數
1. **可讀性**:
* 命名參數可以顯式地指定參數名,使得函數或構造函數的調用更加清晰明了。例如,通過 `city: 'New York'` 傳遞參數,而不是僅僅通過位置傳遞參數。
* 特別是當函數或構造函數有多個可選參數時,命名參數可以防止參數順序錯誤。
2. **靈活性**:
* 命名參數是可選的,可以在不傳遞某些參數的情況下調用構造函數。
* 你可以按任意順序傳遞命名參數,而不必擔心參數的順序問題。
### 有默認值的命名參數
命名參數可以有默認值,這使得調用構造函數時更為靈活:
```dart
class MyClass {
final String name;
final int age;
final String city;
// 構造函數,city 有默認值
MyClass(this.name, this.age, {this.city = 'Unknown'});
}
void main() {
var person = MyClass('Alice', 30);
print(person.city); // Unknown
}
```
### required修飾符
在 Dart 中,`required` 修飾符用于標記命名參數(named parameters)為必選參數。即使這些參數是在可選參數的大括號 `{}` 內,它們也必須在調用函數或構造函數時提供。
使用 `required` 修飾符有助于確保某些關鍵參數在調用時不會被遺漏,提高代碼的安全性和可靠性。
```dart
class MyClass {
final String name;
final int age;
final String city;
// 使用 required 修飾符標記必選的命名參數
MyClass({
required this.name,
required this.age,
this.city = 'Unknown',
});
}
void main() {
// 正確調用構造函數,提供了所有 required 參數
var person = MyClass(name: 'Alice', age: 30);
print(person.city); // Unknown
// 錯誤調用構造函數,沒有提供 name 參數
// var person2 = MyClass(age: 25); // 編譯錯誤
}
```
- 寫在前面的話
- Java
- 基礎
- Double的比較
- 小數怎么用二進制表示
- 多線程
- 并發和并行
- 線程池
- 線程池背景
- 線程池構造
- 任務阻塞隊列
- Flutter
- 基礎知識
- Dart基礎
- Android
- 項目架構
- View
- 非UI線程更新View
- AlarmManager
- 對比postDelaryed和Timer
- Bitmap
- 加載100M的圖片卻不撐爆內存
- Bitmap壓縮
- Bitmap局部解碼
- 計算圖片的內存占用
- Android動畫
- Android動畫類型
- Android動畫原理
- 屬性動畫
- 幀動畫
- 補間動畫
- 使用動畫的注意事項
- Android新特性
- 權限組
- Android23(Marshmallow)-6.0
- Android24(Nougat)-7.0
- Android26(Oreo)-8.0
- Android28(Pie)-9.0
- Android29(Q)-10.0
- AndroidX遷移
- Kotlin
- 關鍵字
- Kotlin操作符
- CoroutineScope
- Flow
- CoroutineException