داستان Null در دارت (نال فرزند همه)


به اولین قسمت از مجموعه null safety در Dart خوش اومدی. برای اطلاع از همه قسمت های این مجموعه و زمان انتشار و آپدیتشون این لینک رو دنبال کن.

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

بریم ببینیم چه خبره....

تصویر زیر رو ببین...

این تصویر مربوط به دنیای Dart قبل از null safety هست.

❓مفهومش رو فهمیدی؟
اگه مفهومش رو خوب نفهمیدی نگران نباش , من واست توضیح میدم.

زبان برنامه نویسی Dart یه زبان برنامه نویسی شی گرا هست یا اگه بخوایم خارجیش رو بگیم OOP که مخفف Object Oriented Programming.

مثل همه زبان های برنامه نویسی شی گرای دیگه توی این زبان هم ما با class ها سر کار داریم.

توی Dart هر چیزی که استفاده میکنیم تهش میخوره به یه class.

فرض کن یه variable با نوع int تعریف کردی :‌

int myNum = 2;

این int خودش یه class هست.

تصویر بالا یه اسکرین از source code کلاس int توی Dart هست. میبینید که int ای که بالا برای تعریف variable خودمون استفاده کردیم خودش یه class هست. در واقع ما داریم میگیم که یه variable میخوایم که جنسش از جنس کلاس int باشه یا اینکه من دارم یه variable ای میسازم که قراره یه نمونه یا object از کلاس int رو توی خودش نگه داره.

پس وقتی که یه String یا ... رو هم تعریف میکنیم همین داستان بالا رو داریم :

String myStr = '......';

یا وقتی که خودمون یه class میسازیم :‌

?پس نتیجه گرفتیم که توی Dart همه چیز به class ختم میشه.

?یه نکته پاورقی هم بگم که توی Dart حتا function ها هم به یه class ختم میشن. اگه میخوای در مورد این نکته بیشتر بدونی میتونی این پست از کانال فلاترمون رو ببینی.

?حالا قضیه از اینجا شرو میشه که همه کلاس ها توی Dart از یه کلاس به اسم Object ارث بری میکنن.

هر کلاسی که توی Dart داریم از این کلاس ارث بری میکنه و این ارث بری به صورت ضمنی هست. پس این کلاس یه super type برای همه کلاس های Dart به حساب میاد.

مثال زیر رو ببین :

میبینیم که یه variable از جنس int دارم و بعدش گفتم که ایا a یه Object هست ؟

a is Object 

و جواب true هست چون که کلاس int از کلاس Object ارث بری میکنه و هر variable ای که از جنس int باشه از جنس Object هم هست.

حالا این وسط یه استثنا وجود داره و اون هم کلاس Null هست .

درست شنیدی کلاس Null , این با null فرق داره .(به حرف بزرگ دقت کن)

توی Dart یه کلاسی داریم به اسم Null .

برای این کلاس فقط و فقط و فقط یه نمونه یا object وجود داره که اون هم کلمه کلیدی null هست .

پس کلمه کلیدی null (با حرف کوچیک) یه نمونه یا یه شی یا یه object(حرف کوچیک) از کلاس Null(حرف بزرگ) هست و تنها نمونه یا شی ای که میتونیم از این کلاس داشته باشیم هم همین هست.

The reserved word `null` denotes an object that is the sole instance of this class.

حالا بریم به دنیای قبل از null safety و ببینیم که چه خبر بوده ...

تصویر بالا رو با دقت نگاه کن.

قبل از null safety همه کلاس ها از کلاس Object ارث بری میکردن و یه فرزند از اون به حساب میومدن و کلاس Null هم خودش یه فرزند از همه کلاس های دیگه به حساب میومد.

کلاس Null به صورت مستقیم از Object ارث بری نمیکرد بلکه یه فرزند (فرزند ضمنی) همه کلاس های دیگه به حساب میومد.

به خاطر همین توی دنیای قبل null safety وقتی که مثلن یه variable از جنس int تعریف میکردیم میتونستیم بهش مقدار null هم بدیم.

اینجا یه variable از جنس int تعریف کردم. پس مقداری که بهش میدیم باید یه عدد صحیح باشه ولی چون که کلاس Null خودش یه فرزند از هر کلاسی (از جمله int )به حساب میاد میتونم بهش مقدار null (که یه شی از کلاس Null هست) رو هم بدم.

تاکید میکنم که این داستان برای قبل از null safety هست.

خب این قسمت رو همین جا به پایان میرسونیم.

امیدوارم که لذت برده باشید.

توی قسمت بعدی میبینیم که جناب Null یه فرزند ناخلف و دردسر ساز بوده پس بدون از دست دادن زمان قسمت بعدی رو بخون.