在 Dart 中,“两个点(..)”和“三个点(...)”分别用于不同的操作,主要用于简化代码结构和集合操作。以下是它们的具体用法和示例:
1. 两个点(..): 级联操作符
.. 是级联操作符,用于对同一个对象连续调用多个方法或设置多个属性,而无需重复对象的引用。通常用于链式调用,特别是在对象的初始化设置中,能够让代码更简洁。
示例代码
class Person {
String? name;
int? age;
void setName(String name) {
this.name = name;
}
void setAge(int age) {
this.age = age;
}
}
void main() {
// 使用级联操作符初始化对象属性
var person = Person()
..setName("Alice")
..setAge(25);
print("Name: ${person.name}, Age: ${person.age}");
}
在这个例子中:
• Person 对象 person 使用了级联操作符 .. 来调用 setName 和 setAge。
• 每次 .. 后的调用都是对同一个 person 对象的操作,而不需要重复写 person 的引用。
使用场景
• 对象初始化:可以在对象创建时连续设置多个属性或调用多个方法。
• 链式操作:特别是对于需要多次调用方法的对象,级联操作符可以让代码更加简洁。
2. 三个点(...):展开操作符
... 是展开操作符,用于将一个集合(如列表、集合、或映射)中的元素展开,并将其添加到另一个集合中。常用于将多个集合合并成一个集合。
示例代码
void main() {
var list1 = [1, 2, 3];
var list2 = [4, 5, 6];
var combinedList = [...list1, ...list2]; // 合并两个列表
print(combinedList); // 输出:[1, 2, 3, 4, 5, 6]
}
在这个例子中:
• ...list1 和 ...list2 将 list1 和 list2 中的元素展开,然后将所有元素添加到新的列表 combinedList 中。
3. 可空展开操作符(...?)
Dart 还支持 ...? 操作符,用于展开可能为 null 的集合。如果集合为 null,那么 ...? 不会添加任何元素,避免出现 null 错误。
void main() {
var list1 = [1, 2, 3];
List<int>? nullableList; // null 列表
var combinedList = [...list1, ...?nullableList]; // 安全合并
print(combinedList); // 输出:[1, 2, 3]
}
在这个例子中,...?nullableList 不会导致错误,即使 nullableList 为 null,combinedList 仍然会安全地初始化为 [1, 2, 3]。
总结
• ..(级联操作符):用于对同一对象连续调用多个方法或设置多个属性。
• ...(展开操作符):用于将一个集合展开并合并到另一个集合中。
• ...?(可空展开操作符):在展开可能为 null 的集合时使用,避免出现 null 错误。