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

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

nullسلام ممنون که انگشت مبارک رو روی این مقاله فشردی .امروز میخوایم در مورد کنترل مقادیر null در دارت صحبت کنیم شاید این مقاله توی چند قسمت کامل بشه بازم بستگی به حجمش داره 🤯 .خب اول از همه یه نکته رو بگم که این قابلیت روی بتا هست (دلیل نمیشه ما در موردش ندونیم 🤪 ) و هنوز وارد stable نشده ولی قراره به زودی وارد زبان دارت بشه.حالا بریم سر اصل مطلب … وقتی شما از null safety استفاده میکنید تموم type هاتون به صورت پیشفرض non-nullable میشه یعنی تا وقتی خودتون به دارت گوشزد نکنید کلیه مقادیرتون نمیتونه null باشه . (پایین تر با ذکر مثال های متعدد این قسمت رو بیشتر توضیح میدم )زمانی که ما از null safety استفاده میکنیم ارور های مربوط به مقادیر null از runtime به edit-time منتقل میشه یعنی در حالت اول و بدون استفاده از null safety شما باید برنامه رو اجرا کنید تا ارور های مربوط به مقادیر null رو دریافت کنید ولی با استفاده از این قابلیت همون لحظه که یک متغیر تعریف میکنید اگر مشخص نکنید که میتونه null باشه همونجا dart analysis با یه ارور زیبا ازتون پذیرایی میکنه .شاید شکل زیر بتونه تو فهم پاراگراف بالا کمک کنه .runtime erroredit time errorاین اصول را به ۳ بخش نهاده اند :۱ – به صورت پیش فرض 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 :var i = 42; // دارت منتظره یه متغیر نال پیدا کنه پاچه بگیره
String name = getFileName();
final b = Foo();مثال برای متغیر های nullable :int? aNullableInt = null;اگر مطمعن هستید یک متغیر قبل از استفاده حتما مقدار دهی میشه ولی دارت بهتون اجازه نمیده که اون رو بدون مقدار دهی اولیه تعریف کنید میتونید از late استفاده کنید . مثال زیر class IntProvider {
late int aRealInt;

IntProvider() {
aRealInt = calculate();
}
}دو تا از اثر های کلید واژه late :۱ – زمانی که از late استفاده میکنید اجباری وجود نداره که متغیر رو فورا مقداردهی کنید .۲ – اگر یک متغیر غیر نال نیاز به محاسبه داشته باشه زمانی که از late استفاده میکنید یک تاخیر برای محاسبه متغیر تا قبل از اولین استفاده اعمال میشه .استفاده از متغیر ها و اصطلاحات :زمانی که دارت یک متغیر nullable پیدا کنه که نباید نال باشه یک ارور generate میکنه و زمانی که از یک متغیر با قابلیت نال بودن استفاده میکنیم باید توجه کنیم که مقادیر null رو هندل کنیم برای مثال میتونید از اصطلاحات if , ?? , ?. استفاده کنید مثال های زیر رو یه نگاه بندازید .نکته : dart analyzer نمیتونه وضعیت null safety متغیر های گلوبال رو پیش بینی کنه .مثال ؟؟ :int value = aNullableInt ?? 0; // اگر نال بود صفر وگرنه مقدار خوده متغیرمثال if :int definitelyInt(int? aNullableInt) {
if (aNullableInt == null) {
return 0;
}
return aNullableInt; // نمیتونه نال باشه
}مثال ! :int? aNullableInt = 2;
int value = aNullableInt!; // `aNullableInt!` is an int.
// This throws if aNullableInt is null.نکته : اگر مطمعن نیستید که مقدار متغیر نال نیست به هیچ وجه از ! استفاده نکنید .نکته : اگر نیاز دارید که type یک متغیر nullable رو تغییر بدید میتونید از as به عنوان typecast operator استفاده کنید مثال :return maybeNum() as int; نکته : در زمان استفاده از null safety ما نمیتونیم از . (member access operator) استفاده کنیم در عوض میتونیم از (.?) استفاده کنیم مثال :double? d;
print(d?.floor());print(d?.floor());این operator در اصل منظورش اینه که اگر مقدار d نال نبود متد floor رو روش فراخوانی کن …خب حس میکنم تا اینجا کافیه 😅 . https://media.giphy.com/media/26BGqofNXjxluwX0k/giphy.gif البته یه قسمت دیگه در مورد list , map , set و استفاده از null safety در اونها مونده که توی قسمت دوم بهش میپردازیم .نکته مهم : اگر جایی از مقاله مشکل نگارشی یا علمی داشت ممنون میشم کامنت کنید ☹️.اگه براتون مفید بود لایک یادتون نره حتما نظراتتون رو کامنت کنید 😍. اگر هم منو فالو ندارید خوشهال میشم فالو کنید از این به بعد قراره مباحثی که در مورد فلاتر و دارت رو مطالعه میکنم توی ویرگول براتون منتشر کنم .

Author: admin

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *