Dart 两个点(..)”和“三个点(...)的作用

49 阅读2分钟

在 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 错误。