Null safety in dart | قسمت #2

null safety in dart
null safety in dart

قسمت قبل :

https://vrgl.ir/5j891

سلام بدون اتلاف وقت میریم برای ادامه ماجرا ...
در ادامه قسمت قبل از null safety امروز میریم سراغ مدیریت مقادیر نال در list , map , ... ها .

بررسی List , Map , Set

در زبان دارت از list و map و set ها معمولا برای نگه داری داده های مجموعه ای استفاده میشه در این قسمت میخوایم قابلیت null safety رو بهشون اضافه کنیم .
اول میریم سراغ list ها و set ها فرض کنید شما یک list تعریف کردید حالا به نظرتون چه چیز های میتونه اینجا null باشه ؟

درسته در حالت اول امکان داره خود لیستمون null باشه و در حالت دوم لیستمون شامل ایتم های null باشه ما برای کنترل این حالت ها از ( ? ) question mark کمک میگیریم . عکس زیر کامل روش کنترل مقادیر null توی لیست رو نشون میده :

null safety in list
null safety in list

عکس بالا داره حالت های مختلف رو بررسی میکنه .
برای مثال چطوری null بودن خود لیست رو کنترل کنیم ? ؟
کافیه در زمان تعریف متغیرمون که یک لیست هست بعد از type اون متغیر یک question mark بگذاریم
به شکل زیر :
list<String>? myFriends : این مثال لیست میتونه null باشه
list<String> myFriends : این مثال لیست نمیتونه null باشه

حالت بعدی اینه که چطوری null بودن ایتم های درون لیست رو کنترل کنیم . چطوری ? ؟
زمانی که داریم یک لیست تعریف میکنیم باید برای اون لیست یه data type مشخص کنیم که مشخص میکنه عضو های اون لیست از اون جنس هستند کافیه در زمان تعریفش بعد از اون data type یک علامت question mark بگذاریم به شکل زیر :
list<String?> myFriends : این مثال عضو های لیست میتونه یک متغیر null باشه
list<String> myFriends : این مثال عضو های لیست نمیتونه یک متغیر null باشه

خب این از لیست کارش تمومه فقط همونطور که تو عکس بالا میبینید شما میتونید از هر دو همزمان استفاده کنید .

نکته : زمانی که میخوایم یک متغیر تعریف کنیم و میخوایم از type annotation به جای type دادن به صورت بالا استفاده کنیم بازم میتونیم از question mark استفاده کنیم . کد زیر :

type annotation
type annotation

بررسی Map

در map ها یک استثنا وجود داره اونم اینه که زمانی ما مقدار یک کلیدی که توی لیست وجود نداره رو درخواست میکنیم خب مشخصه مقدار null برمیگرده ??‍♂️ .
مثال زیر رو ببینید و مقدار و نوع متغیر uhOh رو حدس بزنید :

uhOh
uhOh

جواب : مقدارش برابر با null و type متغیر هم برابر با ?int هست .

عکس زیر به بررسی map ها پرداخته :

map null safety
map null safety

توی map ها هم مشابه با لیست ها هم میتونه خود مپ null باشه هم مقدار کلید هاش .
نکته ( * ) : داستان اون ستاره توی عکس از این قراره که زمانی که مقدار همه ی کلید های توی map یک مقدار غیر null باشه زمانی که شما مقدار یک کلیدی که وجود نداره رو درخواست میکنید به شما مقدار null بر میگردونه .
به همین دلیل چون map ها در زمان درخواست کلید اشتباه مقدار null بر میگردونن نمیتونیم از متغیر های non nullable برای نگه داری اون ها استفاده کنیم . کد زیر :

map
map

نکته : اگر حتما مطمعن هستید که در map کلیدی که وجود نداره رو جست و جو نمیکنید میتونید از ! هم استفاده کنید . کد زیر :

!
!

یک کار راه حل دیگه هم وجود داره که ما در زمان جست و جو در map میتونیم از ?? operator استفاده کنیم و مثلا اگر مقدار null بود یه مقدار دلخواه برگردونیم مثلا اگر value هامون از نوع int بود میتونیم مقدار 0 رو برگردونیم . کد زیر :

؟؟
؟؟

خب اینم از map ها ? .

تا اینجا این مطالب چیزایی بود که از null safety متوجه شدم اگر چیز جدیدی یاد گرفتم حتما اضافه میکنم .

منابعی که من در مورد null safety خوندم :

https://dart.dev/null-safety
https://github.com/dart-lang/samples/tree/master/null_safety/calculate_lix

همین الان که داشتم منابع رو اضافه میکردم چشمم به یک داکیومنت جدید خورد که چجوری به کد های قبلیمون null safety رو اضافه کنیم ... پس احتمالا اون میشه قسمت بعدی و هنوز داستان ادامه داره ??.

نکته مهم : اگر جایی از مقاله مشکل نگارشی یا علمی داشت ممنون میشم کامنت کنید ☹️.

اگه براتون مفید بود لایک یادتون نره حتما نظراتتون رو کامنت کنید ?. اگر هم منو فالو ندارید خوشهال میشم فالو کنید از این به بعد قراره مباحثی که در مورد فلاتر و دارت رو مطالعه میکنم توی ویرگول براتون منتشر کنم .