# 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