Null safety in dart | مدیریت مقادیر نال در دارت

dart null safety
dart null safety

سلام ممنون که انگشت مبارک رو روی این مقاله فشردی .

امروز میخوایم در مورد کنترل مقادیر null در دارت صحبت کنیم شاید این مقاله توی چند قسمت کامل بشه بازم بستگی به حجمش داره ? .

خب اول از همه یه نکته رو بگم که این قابلیت روی بتا هست (دلیل نمیشه ما در موردش ندونیم ? ) و هنوز وارد stable نشده ولی قراره به زودی وارد زبان دارت بشه.

حالا بریم سر اصل مطلب ... وقتی شما از null safety استفاده میکنید تموم type هاتون به صورت پیشفرض non-nullable میشه یعنی تا وقتی خودتون به دارت گوشزد نکنید کلیه مقادیرتون نمیتونه null باشه . (پایین تر با ذکر مثال های متعدد این قسمت رو بیشتر توضیح میدم )

زمانی که ما از null safety استفاده میکنیم ارور های مربوط به مقادیر null از runtime به edit-time منتقل میشه یعنی در حالت اول و بدون استفاده از null safety شما باید برنامه رو اجرا کنید تا ارور های مربوط به مقادیر null رو دریافت کنید ولی با استفاده از این قابلیت همون لحظه که یک متغیر تعریف میکنید اگر مشخص نکنید که میتونه null باشه همونجا dart analysis با یه ارور زیبا ازتون پذیرایی میکنه .

شاید شکل زیر بتونه تو فهم پاراگراف بالا کمک کنه .

runtime error
runtime error
edit time error
edit time error
نکته : برای تست کردن null safety نیازی نیست حتما برید روی چنل بتا به راحتی میتونید از دارت پد با قابلیت null safety استفاده کنید (همونجا کلی مثال هست که اگر اونا رو هم بخونید مطلب کاملا جا میفته براتون) که لینکشو این پایین براتون قرار میدم .
https://nullsafety.dartpad.dev/

اصول null safety :

این اصول را به ۳ بخش نهاده اند :

۱ - به صورت پیش فرض non-nullable :

در حالت کلی تا زمانی که به دارت نگیم فلان متغیر من میتونه null باشه دارت به صورت پیش فرض همرو non nullable در نظر میگیره یعنی متغیر هامون نمیتونن null باشن .

۲ - incrementally adoptable :

ما میتونیم توی هر قسمت از پرژمون از null safety استفاده کنیم پس میتونیم یک کد ترکیبی داشته باشید و میتونیم به هر بخش از پروژمون رو در صورت نیاز قابلیت null safety اضافه کنیم نگران هم نباشید دارت قراره یکسری ابزار برای migration کردن کد های قبلیمون ارائه بده .

۳ - fully sound :

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

حالا بریم یه تور از قابلیت های null safety داشته باشیم :

کلمات کلیدی قابل استفاده در null safety : ؟ _ ! _ late (فکر کنم این کلید واژه توی کاتلین هم باشه)

اگر زبان های kotlin , TypeScript و ... کار کرده باشید تا حدودی با null safety اشنا هستید .

ساخت متغیر

در زمان ساخت متغیر برای اینکه قابلیت null بودن رو به متغیر اضافه کنیم میتونیم از ? یا late استفاده کنیم

مثال برای متغیر های non nullable :

مثال برای متغیر های nullable :

اگر مطمعن هستید یک متغیر قبل از استفاده حتما مقدار دهی میشه ولی دارت بهتون اجازه نمیده که اون رو بدون مقدار دهی اولیه تعریف کنید میتونید از late استفاده کنید . مثال زیر

دو تا از اثر های کلید واژه late :

۱ - زمانی که از late استفاده میکنید اجباری وجود نداره که متغیر رو فورا مقداردهی کنید .

۲ - اگر یک متغیر غیر نال نیاز به محاسبه داشته باشه زمانی که از late استفاده میکنید یک تاخیر برای محاسبه متغیر تا قبل از اولین استفاده اعمال میشه .

استفاده از متغیر ها و اصطلاحات :

زمانی که دارت یک متغیر nullable پیدا کنه که نباید نال باشه یک ارور generate میکنه و زمانی که از یک متغیر با قابلیت نال بودن استفاده میکنیم باید توجه کنیم که مقادیر null رو هندل کنیم برای مثال میتونید از اصطلاحات if , ?? , ?. استفاده کنید مثال های زیر رو یه نگاه بندازید .

نکته : dart analyzer نمیتونه وضعیت null safety متغیر های گلوبال رو پیش بینی کنه .

مثال ؟؟ :

مثال if :

مثال ! :

نکته : اگر مطمعن نیستید که مقدار متغیر نال نیست به هیچ وجه از ! استفاده نکنید .

نکته : اگر نیاز دارید که type یک متغیر nullable رو تغییر بدید میتونید از as به عنوان typecast operator استفاده کنید

مثال :

نکته : در زمان استفاده از null safety ما نمیتونیم از . (member access operator) استفاده کنیم در عوض میتونیم از (.?) استفاده کنیم

مثال :

این operator در اصل منظورش اینه که اگر مقدار d نال نبود متد floor رو روش فراخوانی کن ...

خب حس میکنم تا اینجا کافیه ? .

البته یه قسمت دیگه در مورد list , map , set و استفاده از null safety در اونها مونده که توی قسمت دوم بهش میپردازیم .

https://vrgl.ir/8kbEM

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

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