از حالا بگم که چیز سختی نیست و میتونیم اصلا ازش استفاده نکنیم ولی بالاخره کارمون رو آسون میکنه و اگه احیانا جایی دیدیم حداقل سرمون گیج نمیره! :)
عملگر دو نقطه (Cascade notation):
این قابلیت رو بهش میگن syntactic sugar حالا ینی چی؟ تو برنامه نویسی بعضی سینتکسها برای راحتی و خوانایی بیشتر هستند که این اصطلاح این قضیه رو بیان میکنه. داخل دارت این «دو نقطه» به ما اجازه میده تا توالی از operatorها روی یک آبجکت پیاده کنیم. شما میتونید با دابل دات متدهای یک شی رو فراخوانی کنید و به پراپرتیهاش دسترسی داشته باشید. این عملگر برای اینکه کد ما تمیزتر و کوتاهتر بشه مورد استفاده قرار میگیره و اغلب دیگه نیاز شما رو از ساختن متغیرهای موقت برطرف میکنه.
// with cascade notation: querySelector('#confirm') // Get an object. ..text = 'Confirm' // Use its members. ..classes.add('important') ...listen((e) => window.alert('Confirmed!')) // without cascade notation var button = querySelector('#confirm'); button.text = 'Confirm'; button.classes.add('important'); button..listen((e) => window.alert('Confirmed!'));
توضیح کد:
داخل کد اولی از عملگر دو نقطه استفاده شده و میبینید که یک شی دریافت میکنه و به پراپرتیهای اون شی دسترسی داره. داخل کد بعدی بدون قابلیت cascade notation مجبور شدیم یه متغیر بسازیم و بعد از اون متغیر برای دسترسی به پراپرتیهاش استفاده کنیم.
عملگر سه نقطه (Spread notation):
این عملگر روی کالکشنها جواب میده مثل List, Map و Set. بخوایم کتابی بگیم، باعث گسترش اون کالکشن میشه و کاری که واقعا انجام میده، میشه اون کالکشن رو صدا میزنه و دونه دونه ممبرهاش رو فراخوانی میکنه مثل یه foreach عمل میکنه.
قبلا روی دارت 2.3 ما addAll رو داشتیم تا دو تا لیست رو با هم کمباین کنیم و حالا spread operator همون کار رو برامون راحتتر انجام میده.
List<int> list1 = [1, 2, 3]; List<int> result = [0, ...list1]; print(result); //output: [0,1,2,3]
اضافه کردن دو تا لیست به یک لیست جدید:
List<int> list1 = [1, 2, 3]; List<int> list2 = [4, 5]; List<int> result = [...list1, ...list2]; print(result); //output: [1,2,3,4,5]
بخوایم سختترش کنیم:
List<int> result = [...[0, ...list1, ...list2], 6]; print(result); //output: [0,1,2,3,4,5,6]
و اگه بخوایم یه لیست نال رو بهش اضافه کنیم چی:
List<int> nullList = null; List<int> result = [...l1, ...nullList]; print(result);
خب اینجا اخطار میده و باید بعد از عملگر سه نقطه اجازه نال بودن رو بهش بدیم:
List<int> nullList = null; List<int> result = [...l1, ...?nullList]; //add null-able sign print(result); //output: [1,2,3]
میشه از شرطها هم استفاده کرد:
bool condition = false; List<int> result = [...list1, if (condition) ...list2]; print(result);
استفاده از Future لیست:
Future<List<int>> list1 = Future.value([1, 2, 3]); Future<List<int>> list2 = Future.value([3, 4, 5]); List<int> result = [...await list1, ...await list2]; print(result);
داخل Map و Set هم به همین صورته لینک میزارم خواستید اونورم چک کنید:
https://www.woolha.com/tutorials/dart-using-triple-dot-spread-operator-examples
سورس بعدی:
https://flutterbyexample.com/lesson/cascade-notation
امیدوارم استفادهی لازمو از این آموزش برده باشید.
دوستدار شما مسعود سعیدی