Danh sách sử dụng dấu chấm kép (.) Trong phi tiêu?


141

Đôi khi tôi thấy điều này List list = [];

Sau đó list..add(color)

Có gì khác biệt khi sử dụng 1 chấm ( .) và 2 chấm ( ..)?

Câu trả lời:


242

..được gọi là ký hiệu thác . Nó cho phép bạn không lặp lại cùng một mục tiêu nếu bạn muốn gọi một số phương thức trên cùng một đối tượng.

List list = [];
list.add(color1);
list.add(color2);
list.add(color3);
list.add(color4);

// with cascade

List list = [];
list
  ..add(color1)
  ..add(color2)
  ..add(color3)
  ..add(color4);

76

Đó là nhà điều hành thác của Dart

var l1 = new List<int>()..add(0)..addAll([1, 2, 3]);

kết quả l1là một danh sách[0, 1, 2, 3]

var l1 = new List<int>().add(0).addAll([1, 2, 3]);

dẫn đến một lỗi, bởi vì .add(0)trả vềvoid

..(trong ví dụ trước) đề cập đến new List(), trong khi .(ở phần sau) đề cập đến giá trị trả về của phần trước của biểu thức.

..đã được giới thiệu để tránh sự cần thiết phải quay lại thistrong tất cả các loại phương thức như add()có thể sử dụng API một cách trôi chảy.

.. cung cấp điều này ra khỏi hộp cho tất cả các lớp.


Nhắc lại .. (in former example) refers to new List(), bạn có nghĩa là chúng ta lại tạo ra một cái mới Listkhi chúng ta đang sử dụng ..theo ý kiến ​​của tôi KHÔNG. Tôi đã nhầm lẫn bởi bạn newtừ, là nó thực sự MỚI hoặc bạn đang nói về newtừ khóa ở đây.
CopsOnRoad

Đầu tiên newbây giờ là tùy chọn. ..đề cập đến danh sách được trả về bởi new List<int>()và cho phép gọi nhiều phương thức trên đó add(0) addAll(...)mà không lặp lại l1.và đó là thể hiện danh sách được tạo được gán cho l1, không phải giá trị trả về của phương thức cuối cùng trong chuỗi ( addAll(...)). Điều này có trả lời câu hỏi của bạn không?
Günter Zöchbauer

1
Chắc chắn rồi! Tôi biết newlà bắt đầu tùy chọn với Dart 2.0, tôi chỉ bối rối newtrong bối cảnh trên và cảm ơn lời giải thích của bạn.
CopsOnRoad

1
..add(6)là thích l1.add(6), .add(6)là thích l1.add(5).add(6). add(5)trở về voidvà bạn không thể gọi add()tiếpvoid
Günter Zöchbauer

2
hãy làm theo tài liệu này: - dartlang.org/guides/lingu/lingu-tour#cascade-notation- Nói đúng ra, ký hiệu hai chấm của một câu đối với thác không phải là toán tử. Nó chỉ là một phần của cú pháp Dart.
Mr Đặc biệt

17

Cascades (..) cho phép bạn thực hiện một chuỗi các hoạt động trên cùng một đối tượng. đọc tài liệu để biết chi tiết

querySelector('#confirm') // Get an object.
  ..text = 'Confirm' // Use its members.
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

Ví dụ trước tương đương với:

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

1
cảm ơn vì ví dụ này bất kỳ ý tưởng tại sao ..onClickkhông dịch sang button.classes.onClick?
Bouke Versteegh

1

..Được gọi là toán tử xếp tầng trong phi tiêu.

Nó cho phép bạn sử dụng nhiều hơn một thao tác tiếp theo:

Ví dụ:

banerad..load()..show().

List coursename;
coursename..add("java")..add("flutter" )..add("dart");

Đây là một ví dụ khác

Đây là một ví dụ khác

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.