รายการการใช้จุดคู่ (.) ในโผ?


คำตอบ:


245

..เป็นที่รู้จักกันเป็นสัญกรณ์น้ำตก ช่วยให้คุณไม่ต้องทำซ้ำเป้าหมายเดิมหากคุณต้องการเรียกใช้หลายวิธีในวัตถุเดียวกัน

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);

77

เป็นตัวดำเนินการเรียงซ้อนของ Dart

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

ส่งผลl1ให้เป็นรายการ[0, 1, 2, 3]

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

ส่งผลให้เกิดข้อผิดพลาดเนื่องจาก.add(0)ส่งคืนvoid

..(ในตัวอย่างก่อนหน้า) อ้างถึงnew List()ในขณะที่.(ในภายหลัง) หมายถึงค่าที่ส่งคืนของส่วนก่อนหน้าของนิพจน์

..ได้รับการแนะนำเพื่อหลีกเลี่ยงความจำเป็นในการส่งคืนthisในทุกวิธีเช่นadd()เพื่อให้สามารถใช้ API ได้อย่างคล่องแคล่ว

.. ให้สิ่งนี้นอกกรอบสำหรับทุกชั้นเรียน


อ้างถึง.. (in former example) refers to new List()คุณหมายความว่าเรากำลังสร้างใหม่อีกครั้งListเมื่อเราใช้..ในความคิดของฉัน NO ฉันสับสนกับnewคำของคุณมันใหม่จริงๆหรือคุณกำลังพูดถึงnewคีย์เวิร์ดที่นี่
CopsOnRoad

อันดับแรกnewเป็นทางเลือก ..หมายถึงรายการที่ส่งกลับโดยnew List<int>()และช่วยให้การเรียกวิธีการหลายคนมันเหมือนadd(0) addAll(...)ได้โดยไม่ต้องทำซ้ำl1.และมันก็เป็นเช่นรายการที่สร้างขึ้นที่กำหนดให้l1, ไม่ได้ค่าตอบแทนของวิธีการที่ผ่านมาในห่วงโซ่ ( addAll(...)) สิ่งนี้ตอบคำถามของคุณหรือไม่?
GünterZöchbauer

1
แน่นอน! ฉันรู้ว่าnewเป็นทางเลือกที่เริ่มต้นด้วย Dart 2.0 ฉันเพิ่งสับสนกับnewบริบทข้างต้นและขอบคุณสำหรับคำอธิบายของคุณ
CopsOnRoad

1
..add(6)เป็นเหมือนl1.add(6), เป็นเหมือน.add(6) ผลตอบแทนและคุณไม่สามารถโทรในl1.add(5).add(6)add(5)voidadd()void
GünterZöchbauer

2
ปฏิบัติตามเอกสารนี้: - dartlang.org/guides/language/language-tour#cascade-notation- พูดอย่างเคร่งครัดสัญกรณ์ "จุดคู่" สำหรับการเรียงซ้อนไม่ใช่ตัวดำเนินการ เป็นเพียงส่วนหนึ่งของไวยากรณ์ Dart
นายพิเศษ

19

Cascades (.. ) ช่วยให้คุณสร้างลำดับของการดำเนินการบนวัตถุเดียวกันได้ อ่านเอกสารเพื่อดูรายละเอียด

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

ตัวอย่างก่อนหน้านี้เทียบเท่ากับ:

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

1
ขอบคุณสำหรับตัวอย่างนี้! ความคิดใด ๆ ทำไม..onClickไม่แปลเป็นbutton.classes.onClick?
Bouke Versteegh

ขอบคุณที่ใช้การมอบหมายในตัวอย่างของคุณ ยังใหม่กับ Dart ฉันได้อ่านสัญกรณ์จุดคู่เล็กน้อย แต่คิดว่ามันเป็นเพียงการผูกมัดวิธีการโมฆะ
Keith DC

1

..เรียกว่าตัวดำเนินการเรียงซ้อนในโผ

ช่วยให้คุณสามารถใช้การดำเนินการในภายหลังมากกว่าหนึ่งครั้ง:

ตัวอย่าง:

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

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

นี่คืออีกตัวอย่างหนึ่ง

นี่คืออีกตัวอย่างหนึ่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.