i,m in a good relationship with Flutter
Null safety in dart | قسمت #2
![null safety in dart](https://files.virgool.io/upload/users/115099/posts/tjhur9bwxcpt/stj7wi2x5d84.webp)
قسمت قبل :
سلام بدون اتلاف وقت میریم برای ادامه ماجرا ...
در ادامه قسمت قبل از 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](https://files.virgool.io/upload/users/115099/posts/tjhur9bwxcpt/lzv47tvvvcqd.png)
عکس بالا داره حالت های مختلف رو بررسی میکنه .
برای مثال چطوری 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](https://files.virgool.io/upload/users/115099/posts/tjhur9bwxcpt/qxuhkrqsvdps.png)
بررسی Map
در map ها یک استثنا وجود داره اونم اینه که زمانی ما مقدار یک کلیدی که توی لیست وجود نداره رو درخواست میکنیم خب مشخصه مقدار null برمیگرده ??♂️ .
مثال زیر رو ببینید و مقدار و نوع متغیر uhOh رو حدس بزنید :
![uhOh](https://files.virgool.io/upload/users/115099/posts/tjhur9bwxcpt/j2sskafdl1y7.png)
جواب : مقدارش برابر با null و type متغیر هم برابر با ?int هست .
عکس زیر به بررسی map ها پرداخته :
![map null safety](https://files.virgool.io/upload/users/115099/posts/tjhur9bwxcpt/c9xu6ibnbxlq.png)
توی map ها هم مشابه با لیست ها هم میتونه خود مپ null باشه هم مقدار کلید هاش .
نکته ( * ) : داستان اون ستاره توی عکس از این قراره که زمانی که مقدار همه ی کلید های توی map یک مقدار غیر null باشه زمانی که شما مقدار یک کلیدی که وجود نداره رو درخواست میکنید به شما مقدار null بر میگردونه .
به همین دلیل چون map ها در زمان درخواست کلید اشتباه مقدار null بر میگردونن نمیتونیم از متغیر های non nullable برای نگه داری اون ها استفاده کنیم . کد زیر :
![map](https://files.virgool.io/upload/users/115099/posts/tjhur9bwxcpt/ywqdntijuhio.png)
نکته : اگر حتما مطمعن هستید که در map کلیدی که وجود نداره رو جست و جو نمیکنید میتونید از ! هم استفاده کنید . کد زیر :
![!](https://files.virgool.io/upload/users/115099/posts/tjhur9bwxcpt/8jfngrwmpvfy.png)
یک کار راه حل دیگه هم وجود داره که ما در زمان جست و جو در map میتونیم از ?? operator استفاده کنیم و مثلا اگر مقدار null بود یه مقدار دلخواه برگردونیم مثلا اگر value هامون از نوع int بود میتونیم مقدار 0 رو برگردونیم . کد زیر :
![؟؟](https://files.virgool.io/upload/users/115099/posts/tjhur9bwxcpt/znnsss3m4ori.png)
خب اینم از map ها ? .
تا اینجا این مطالب چیزایی بود که از null safety متوجه شدم اگر چیز جدیدی یاد گرفتم حتما اضافه میکنم .
منابعی که من در مورد null safety خوندم :
همین الان که داشتم منابع رو اضافه میکردم چشمم به یک داکیومنت جدید خورد که چجوری به کد های قبلیمون null safety رو اضافه کنیم ... پس احتمالا اون میشه قسمت بعدی و هنوز داستان ادامه داره ??.
نکته مهم : اگر جایی از مقاله مشکل نگارشی یا علمی داشت ممنون میشم کامنت کنید ☹️.
اگه براتون مفید بود لایک یادتون نره حتما نظراتتون رو کامنت کنید ?. اگر هم منو فالو ندارید خوشهال میشم فالو کنید از این به بعد قراره مباحثی که در مورد فلاتر و دارت رو مطالعه میکنم توی ویرگول براتون منتشر کنم .
مطلبی دیگر از این انتشارات
کم کردن حجم فایل apk اپلیکیشن فلاتر
مطلبی دیگر از این انتشارات
روش ایجاد روتر در فلاتر
مطلبی دیگر از این انتشارات
مفاهیم پایه فلاتر : Widget -> BuildContext -> State