تعد مفهوم الـ Null Safety في لغة البرمجة Dart ميزة تساعد المطورين في تجنب أخطاء القيمة الفارغة (Null). تُعرف هذه الميزة بصفة “Sound Null Safety” في Dart، وتسمح للمطورين بالكشف عن أخطاء القيمة الفارغة Null في وقت التحرير.
فوائد الـ Null Safety في لغة دارت:
- كتابة كود آمن.
- تقليل فرص حدوث تعطل التطبيقات.
- سهولة العثور على الأخطاء في الكود وإصلاحها.
مشكلة القيمة الفارغة Null في دارت:
يُعاني المبرمجون من صعوبة في التعامل مع القيم الفارغة Null، حيث ينسون أن القيم الفارغة قد تتسبب في تعطل البرنامج. عندما يتعلق الأمر بالقيم الفارغة، فإنها تشبه قنبلة موقوتة في العالم الحقيقي تنتظر الفرصة المناسبة لتفجير البرنامج.
في الأساس، في Dart، العديد من المتغيرات والحقول هي غير قابلة للقيمة الفارغة بشكل افتراضي، وهذا يعني أنه لا يمكن أن تكون لديها قيمة فارغة Null ما لم تسمح بذلك صراحة.
كيفية تعريف قيمة فارغة Null:
باستخدام الـ Null Safety في Dart، لا يمكنك توفير قيمة فارغة افتراضيًا. إذا كنت متأكدًا بنسبة 100٪ من استخدام القيمة الفارغة، يمكنك استخدام عامل الاستفهام (?) بعد إعلان النوع.
مثال:
// تعريف متغير قابل للقيمة الفارغة Null باستخدام ? String? name;
يقوم هذا المثال بتعريف متغير يسمى name
والذي يمكن أن يكون قيمته فارغة (null) أو قيمة نصية.
تعيين القيم للمتغيرات القابلة للقيمة الفارغة Null:
يمكنك تعيين قيمة للمتغيرات القابلة للقيمة الفارغة بنفس الطريقة التي تعين بها قيمة لأي متغير آخر. ومع ذلك، يمكنك أيضًا تعيين القيمة الفارغة لها.
مثال:
void main(){ // تعريف متغير قابل للقيمة الفارغة Null باستخدام ? String? name; // تعيين قيمة "John" للمتغير name name = "John"; // تعيين القيمة الفارغة Null للمتغير name name = null; // طباعة قيمة المتغير name print(name); }
نتيجة الكود:
null
استخدام المتغيرات القابلة للقيمة الفارغة Null:
يمكنك استخدام المتغيرات القابلة للقيمة الفارغة Null بعدة طرق. هنا بعض الأمثلة:
- يمكنك استخدام عبارة if للتحقق مما إذا كان المتغير قيمته فارغة Null أم لا.
- يمكنك استخدام عامل التعجب (!)، والذي يعيد القيمة الفارغة إذا كان المتغير فارغًا Null.
- يمكنك استخدام عامل التعويض (??) لتعيين قيمة افتراضية إذا كان المتغير فارغًا Null.
أمثلة على الـ Null Safety في لغة دارت:
مثال 1: استخدام الـ Null Safety في لغة دارت
void main(){ // تعريف متغير قابل للقيمة الفارغة Null باستخدام ? String? name; // تعيين قيمة "John" للمتغير name name = "John"; // تعيين القيمة الفارغة للمتغير name name = null; // التحقق مما إذا كان المتغير name فارغًا باستخدام عبارة if if(name == null){ print("الاسم فارغ"); } // استخدام عامل التعويض (??) لتعيين قيمة افتراضية String name1 = name ?? "غريب"; print(name1); // استخدام عامل التعجب (!) لإرجاع القيمة الفارغة Null إذا كان المتغير name فارغًا String name2 = name!; print(name2); }
نتيجة الكود:
الاسم فارغ غريب Uncaught TypeError: Cannot read properties of null (reading 'toString')Error: TypeError: Cannot read properties of null (reading 'toString')
مثال 2: تعريف قائمة بعناصر قابلة للقيمة الفارغة
يمكنك أيضًا تخزين القيم الفارغة في قوائم. في هذا المثال، القائمة items
تحتوي على عناصر من نوع int?
، والتي يمكن أن تحتوي على قيم فارغة بالإضافة إلى أعداد صحيحة.
void main() { // قائمة من الأعداد الصحيحة القابلة للقيمة الفارغة Null List<int?> items = [1, 2, null, 4]; print(items); }
نتيجة الكود:
[1, 2, null, 4]
مثال 3: استخدام الـ Null Safety في دوال Dart
في هذا المثال، تحتوي الدالة printAddress
على معامل يسمى address
من نوع String
، وإذا قمت بتمرير قيمة فارغة (null) إلى هذه الدالة، ستتلقى خطأ أثناء التحرير.
void printAddress(String address) { print(address); } void main() { printAddress(null); // يعطي خطأ }
نتيجة الكود:
Error: Compilation failed.
مثال 4: تعريف دالة بمعامل قابل للقيمة الفارغة Null
إذا كنت متأكدًا بنسبة 100٪، فيمكنك استخدام علامة الاستفهام (?) بعد نوع المعامل لتعريفه كقابل للقيمة الفارغة Null.
void printAddress(String? address) { print(address); } void main() { printAddress(null); // الناتج: null }
نتيجة الكود:
null
هذا هو ملخص موجز لمفهوم الـ Null Safety في لغة Dart. هذه الصفة تساعد المطورين في تجنب الأخطاء المرتبطة بالقيم الفارغة Null وتحسين أمان التطبيقات. باستخدام القيم الفارغة بشكل صحيح، يمكنك تحسين جودة الكود الخاص بك وتجنب الأخطاء المحتملة.