فرقِ sound null safe با null safe

تفاوت بین null safe و sound null safe چیست؟

قابلیت sound null safety، از جمله ویژگی‌های زبان دارت هست که می‌تونه در روند اطلاع از خطاها، موثر واقع بشه و یک سیستم متفاوت و جدید هست که توی کمتر پلتفرم‌های برنامه نویسی مشاهده می‌شه. به طوری که فقط زبان برنامه نویسی دارت و سوئیفت شرکت اپل، از جمله گزینه‌هایی هستن که قابلیت sound null safety رو برای عملکرد خودشون تعریف کردن. در باقی موارد، قابلیت null safe مطرح می‌شه که با sound null safety متفاوت هست.

تفاوت قابلیت Sound Null Safe با Null Safe

همونطور که می‌دونین، زبان برنامه نویسی دارت در میان زبان‌های تازه و جدیدی قرار می‌گیره که در سال 2011 توسط گوکل معرفی شد؛ اما با این وجود، باید گفت که هم اکنون یکی از پرکاربردترین و محبوب‌ترین زبان‌های برنامه نویسی، زبان دارت هست. از این رو نسبت به خصوصیات و ویژگی‌های این زبان، حداکثر توجه ممکن به کار گرفته شده و قابلیت sound null safety که در سال 2020 مطرح شد، نمونه‌ای از ساختارهای متفاوت در زبان دارت هست.

با توجه به اهمیتی که قابلیت ذکر شده، برای عملکرد پلتفرم‌های برنامه نویسی داره، در ادامه این مطلب می‌خوایم به طور گسترده‌تری در رابطه با قابلیت sound null safety و زبان برنامه نویسی دارت بپردازیم. در نتیجه اگه شما هم مشتاق اطلاع از این زبان و قابلیت اون هستین، می‌تونین در ادامه با ما همراه باشین.

از جمله بزرگترین و مهم‌ترین قابلیت‌هایی که در رابطه با زبان برنامه نویسی دارت، در قالب یک تمایز مطرح می‌شه، قابلیت sound null safety هست. این قابلیت در رابطه با خطاها وارد عمل می‌شه که کنترل مقادیر null رو به خودش وابسته می‌کنه. در واقع نحوه عملکرد null safety به گونه‌ای هست که روی بازه نمایش ارورهای مربوط به null اثر می‌ذاره.

ارورها در رابطه با انواع فرایندهای طراحی اپلیکیشن‌های و برنامه نویسی، جزء ثابت‌ترین مشکلات هستن که در هر صورت مشاهده می‌شن و وجودشون به هیچ عنوان قابل انکار نبوده. در چنین حالتی، لزوم برطرف کردن این مشکلات، اطلاع به موقع هست.

قابلیت sound null safety با انتقال مقادیر null از runtime به edit-time، زمان دریافت ارورهای null رو تغییر می‌ده. در واقع run time مربوط به زمان اجرا بوده و edit time، مربوط به زمان ویرایش هست. این دو مولفه‌ زمانی، می‌تونن در گیر نمایش ارورها بشن. در صورتی که زبان برنامه‌ نویسی قابلیت sound null safety رو داشته باشه، زمان دریافت ارورها به بازه ویرایش و جمع آوری انتقال پیدا می‌کنه.

تفاوت قابلیت Sound Null Safe با Null Safe

در غیر این صورت اگر دریافت ارورها مربوط به run time یا زمان اجرا باشه، برای اینکه نسبت به شرایط ارورها اطلاعاتی کسب کنین و یا ارورها رو بررسی کنین، باید فرایندها رو به زمان بعد از اجرا موکول کنین. البته فاکتورهایی هم در رابطه با راه اندازی sound null safety مطرح می‌شه که در ادامه بیشتر به توضیح اون‌ها می‌پردازیم.

امروزه توسعه دهندگان، حداکثر توجه ممکن را روی زبان‌هایی چون دارت دارن. علت این موضوع هم سازوکار و نحوه عملکرد این زبان‌ها در هنگام بروز ارور هست. در واقع این افراد معتقد هستن که هر چه ارورها و خطاها سریع‌تر شناسایی شن، افراد می‌تونن سریع‌تر به مسئله برطرف کردن مشکل این خطاها بپردازن. به این ترتیبت کدهای نوشته شده، به درستی مسیر خود را ادامه می‌دن و نیازی به انتظار تا مرحله اجرا نیست.

آموزش کامل فریم ورک فلاتر

آموزش فریم‌ورک فِلاتر

آموزش فلاتر : این را همه می‌دانیم که یکی از اساسی‌ترین چالش‌های موجود برای ساخت اپلیکیشن‌های موبایلی...

مشاهده دوره

در رابطه با قابلیت sound null safety، سه حالت کلی مطرح می‌شه که هر کدوم به بخشی از فرایند sound null safety بستگی پیدا می‌کنن. حالت پیش‌ فرض‌، تدریجی و سالم، این سه حالت رو تشکیل می‌دن که هر کدوم مانند سه مرحله در پی هم هستن. این مراحل در وهله اول شامل مرحله پیش فرض هستن، که روی Non-nullable by default تنظیم شده هست. در چنین شرایطی، شما باید خودتون اقدام به افزودن قابلیت sound null safety کنین.

void main() {
  int a;
  a = null;
  print('a is $a.');
}

اگر این کد رو اجرا کنید، ارور زیر را مشاهده میکنید :

line 3 • A value of type 'Null' can't be assigned to a variable of type 'int'.
Try changing the type of the variable, or casting the right-hand type to 'int'.

که داره به زبان خیلی ساده میگه : خط سوم از مقدار null استفاده کردی. نمیشه توی متغیری که جنس int داره، null ذخیره کنی. در ادامه میگه یا تایپ متغیر a رو عوض کن و یا مقدار null رو حذف کن و بجاش از مقداری استفاده کن که عددی باشه یا جنسش int باشه.


حالت دوم در رابطه با ترکیب انواع کدهای null safe و non null safe هست. در حقیقت باید چنین گفت که این شما هستین که بر حسب شرایط انتخاب و تعیین می‌کنین. چرا که تمامی ابزارهای لازم به وجود آمده و تنها موضوع بر سر null safety بودن یا نبودن اون مطرح می‌شه.

در حالت سوم، بحث مربوط به به‌‌کارگیری قابلیت مورد بحث در فرایند کد نویسی انواع برنامه‌هاست. به طوری که شما خودتون می‌تونین با راه اندازی این قابلیت در برنامه‌هایی که اون رو تعریف می‌کنن، مشکلات و ارورها رو قبل از اجرا مشاهده کنین. در این حالت باید گفت که به کارگیری یا عدم به کارگیری قابلیت مورد بحث، به نوع پروژه شما بستگی داره. در هر صورت مهم‌ این هست که فرایند ارور یابی قبل از اجرا انجام بگیره.

همون طور که در ابتدا این مطلب گفته شده، تمامی زبان‌های برنامه نویسی از قابلیت sound null safety برخوردار نیستن. بلکه تنها چند مورد خاص وجود داره که این ویژگی رو در میان خصوصیات عملکردی خودشون مطرح کردن. حال اگه بخوایم ماهیت این قابلیت رو با null safe مقایسه کنیم، به همون تعریف انتقال بازه زمانی شناسایی ارورها می‌رسیم.

البته که عبارت sound در ابتدای قابلیت مورد هدف، به طور جداگانه در میان عامل تمایز و مقایسه قابلیت‌های ذکر شده قرار می‌گیره. این عبارت در قالب اعتبار وارد عمل می‌شه.

از طرفی باید افزود که بخشی از تفاوت‌های مربوط به قابلیت sound null safety و قابلیت null safe، مرتبط با پلتفرم‌ها یا به عبارت دیگه زبان‌های دیگه‌ای هست که قالباً دارای قابلیت null safe هستند. نحوه عملکرد این قابلیت به گونه‌ای هست که از خطاهای ناشی از دسترسی ناخواسته به متغیرهایی که روی null تنظیم شده‌اند جلوگیری می‌کنه. به عنوان نمونه، اگه یک متد انتظار یک عدد صحیح رو داشته باشه اما null رو دریافت کنه، برنامه شما یک خطای زمان اجرا ایجاد می‌کنه. اشکال زدایی این نوع خطا، یک خطای عدم ارجاع تهی هست.

int? stringLength(String? nullableString) {
  return nullableString.length;
}

اگر این کد رو اجرا کنید، ارور زیر را مشاهده میکنید :

line 2 • The property 'length' can't be unconditionally
accessed because the receiver can be 'null'.
Try making the access conditional (using '?.') 
or adding a null check to the target ('!').

ارور به زبان خیلی ساده داره میگه، پراپرتی length رو اجازه نمیدم با این شرایط ازش استفاده کنی!! چرا؟ چه شرایطی؟ شما توی کدت جلوی int از علامت سوال استفاده کردی، وقتی علامت سوال میذاری یعنی داری به دارت میگی من مطمئن نیستم که تابع قراره عدد برگردونه یا null. چون خودت شک داری، دارت اصلا از این وضعیت خوشش نمیاد و میگه اول مطمئن شو عدد برمیگرده یا null، بعداً اجازه میدم از length استفاده کنی. که توی خط بعدی میبینید نوشته با اضافه کردن علامت تعجب (!) مشکل حل میشه.

علامت تعجب یعنی چی؟ یعنی (( length عزیز، قول میدم تو عدد دریافت کنی یا length عزیز قول میدم تو هیچ وقت null دریافت نکنی )). یه چیزی تو این مایه ها.

cover dart 344x408 1

آموزش برنامه نویسی دارت

مقدمه زبان برنامه نویسی دارت در سال‌های اخیر رشد آهسته و پیوسته‌ای داشته؛ به همین خاطر این روزها این...

مشاهده دوره

در هر صورت اصلی‌ترین عامل تمایز و تفاوت قابلیت sound null safety با null safe، مربوط به بازه رونمایی از ارورهاست. به گونه‌ای که قابلیت sound null safety، این بازه رو به زمان ویرایش کدها ارجاع می‌ده و به این وسیله افراد می‌تونن به راحتی فرایند اصلاح کدها و برطرف سازی ارورها رو حین ویرایش انجام بدن و به این صورت از بروز ارور و خطا هنگان اجرا جلوگیری کنن.

در مقابل، زمان یا بازه ارائه خطاها و ارورها در زبان‌هایی با قبلیت null safe، مربوط به بازه اجرای برنامه هست. در این حالت اصلاح خطاها بسیار دشوارتر خواهد بود. به همین دلیل زبان‌های قدیمی که چنین قابلیتی رو دارن، دیگه طرفداران اونچنانی رو به خودشون اختصاص نمی‌دن و این موضوع هم ناشی از محبوبیتی هست که قابلیت sound null safety می‌تونه در میان افراد داشته باشه‌.

همونطور که گفته شد، sound null از جمله ویژگی‌ها و قابلیت‌هایی هست که در مورد زبان برنامه نویسی دارت به کار گرفته می‌شه و یک حرکت به سوی آینده نوین در برنامه‌ نویسی هست؛ اما باید افزود که این قابلیت، تنها ویژگی و مزیتی نیست که در مورد زبان دارت مطرح می‌شه! در واقع ویژگی‌های زبان دارت، بسیار گسترده هستن و موارد متفاوتی رو شامل می‌شن. از جمله مهم‌ترین این ویژگی‌ها می‌توان به این مسئله اشاره کرد که زبان دارت پایه و اساس فلاتر هست.

شاید شما هم با فریم ورک فلاتر آشنایی داشته باشین. این فریم ورک برای ساخت انواع اپلیکیشن‌های موبایلی و دسکتاپ مورد استفاده قرار می‌گیره و امروزه یکی از شناخته شده‌ترین‌ها در بحث برنامه نویسی هست؛ اما باید در نظر داشت که تمام فعالیت این اپلیکیشن، حول محور زبان برنامه نویسی دارت می‌چرخه و عامل فعالیت اون، همین زبان هست.

از دیگر ویژگی‌ها در رابطه با زبان برنامه نویسی دارت، می‌توان به سهولت یادگیری و حتی کاربرد این زبان اشاره کرد. در واقع برخلاف بسیاری از زبان‌های پیچیده برنامه نویسی، دارت یک زبان قابل فهم هست که پیچیدگی‌های معمول و مربوط به زبان‌های قدیمی رو نداره. به همین دلیل توجه اغلب برنامه‌ نویسان رو به خودش جلب کرده و به یک زبان محبوب نزد افراد تبدیل شده.

در حالت کلی باید چنین گفت که مطرح نمودن ویژگی‌های متنوع و متعدد، عاملی برای خاص و متفاوت بودن زبان برنامه نویسی مورد بحث، در مقایسه با زبان‌های دیگه هست. به طوری که این زبان فرایند کد نویسی را تسهیل بخشیده و از اونجایی که یک زبان در حال رشد و معرفی هست، روزبه‌روز خصوصیات مثبت خودش رو تقویت می‌کنه و قابلیت‌های بیشتری رو در میان امکانات خودش قرار می‌ده.

در نتیجه تنها بحث قابلیت sound null safety نیست که سبب محبوبیت و کاربرد گسترده زبان برنامه نویسی دارت شده؛ بلکه انواع خصوصیات و ویژگی‌ها وجود دارن که توی این مسیر، ایفای نقش موثر می‌کنن. با این حساب، توسعه پروژه‌های مختلف به واسطه زبان‌هایی چون دارت، می‌تونه حداکثر بازدهی ممکن رو داشته باشه. با توجه به اینکه زبان دارت در گستره وسیعی مورد معرفی قرار گرفته، یادگیری اون هم کار چندان سختی نخواهد بود.


پیشنهاد میکنم به این سایت‌ها هم جهت بررسی بیشتر سر بزنید :
1 – سایت اول – مقاله خود سایت دارت در مورد null safe
2 – سایت دوم – درک کامل null safety در سایت اصلی دارت

امتیاز شما به مقاله

4.9 / 5. 23

23 رای 4.9
4.9
(23)
قوانین ارسال دیدگاه متوجه شدم
  • برای ثبت نظر، حتما اسم و فامیل خود را به فارسی وارد کنید.
  • حتما ایمیل صحیح را وارد کنید تا در صورت بررسی کارشناسان، پاسخ برای شما ایمیل شود.
  • داخل متن کامنت کدهای برنامه نویسی قرار ندهید.
2 نقد و بررسی‌ها
  • روزبه
    روزبه 23 بهمن 1403

    واقعا عالی بود ممنون استاد معلمی عزیز

    ( 0 )
  • ولی زاده
    ولی زاده 16 اسفند 1401

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

    ( 3 )
+ ارسال دیدگاه به عنوان مهمان دیدگاه ارسال نمایید
سوالات متداول

نابغه‌ها را در   دنبال کنید