Kodokon kodokon.com

أساسيات Dart: المتغيرات والدوال وأمان القيمة الفارغة (null safety)

تعلّم كيفية تخزين القيم في متغيرات ذات أنواع، وكتابة الدوال، وفهم الحماية من القيمة null.

10 دقيقة · 3 أسئلة

افتح هذا الدرس في Kodokon

قبل بناء الشاشات، لنتعلّم أساسيات Dart، لغة Flutter. إن المتغير صندوق عليه ملصق في ذاكرة الحاسوب، تخزّن فيه قيمة لإعادة استخدامها لاحقًا. وفي Dart، لكل متغير نوع: أي طبيعة ما يمكنه احتواؤه. والأنواع الأربعة الأكثر شيوعًا هي int (عدد صحيح، مثل 28)، وdouble (عدد عشري، مثل 1.65)، وString (سلسلة من الأحرف، أي نص بين علامات اقتباس) وbool (قيمة منطقية: إما true أو false). وتتيح الكلمة المفتاحية var لـ Dart أن تستنتج النوع بنفسها من القيمة التي تقدّمها.

DART
void main() {
  var name = "Camille";
  int age = 28;
  double height = 1.65;
  bool isStudent = true;
  print(name);
  print(age);
  print(height);
  print(isStudent);
}
التصريح بأربعة متغيرات وطباعتها

تعرض print قيمة في وحدة التحكم (console)، وهي المنطقة النصية التي يكتب فيها البرنامج رسائله: وهي مفيدة جدًا لمراقبة ما يجري. ولإدراج متغير في وسط نص ما، توفّر Dart الاستيفاء (interpolation): ضع الرمز $ قبل اسم المتغير، مباشرة داخل السلسلة النصية. وهناك كلمة مفتاحية مفيدة أخرى، final، تُصرِّح بمتغير لا يمكن أن يتغير أبدًا بعد تلقّيه قيمته الأولى: استخدمها حالما تكون هناك قيمة لا يُفترض أن تتطور.

DART
void main() {
  final city = "Lyon";
  var temperature = 21;
  print("In $city, it is $temperature degrees.");
}
يُدرِج الاستيفاء المتغيرات في النص

إن الدالة كتلة صغيرة من الكود قابلة لإعادة الاستخدام، لها اسم، وقد تتلقّى وسائط (parameters) (قيم مُدخَلة، بين قوسين)، ويمكنها أن تُرجِع نتيجة باستخدام الكلمة المفتاحية return. وتُصرِّح بها بكتابة نوع النتيجة أولًا، ثم اسمها، ثم وسائطها. ويعني النوع void "لا يُرجِع شيئًا": وهذا هو حال main، نقطة دخول البرنامج.

DART
int add(int a, int b) {
  return a + b;
}

String greet(String name) {
  return "Hello, $name!";
}

void main() {
  print(add(2, 3));
  print(greet("Nadia"));
}
دالّتان: إحداهما تُرجِع عددًا، والأخرى نصًا

مفهوم أساسي أخير: أمان القيمة الفارغة (null safety). إن null قيمة خاصة تعني "لا شيء، لا قيمة". وقد كانت قيم null المنسية تاريخيًا من الأسباب الرئيسية لتعطّل التطبيقات. لكن Dart تحميك: فافتراضيًا، لا يمكن لمتغير أن يحمل null. وللسماح بذلك صراحةً، أضِف علامة استفهام إلى النوع: تُقرأ String? بمعنى "سلسلة من الأحرف، أو لا شيء". ثم يوفّر المُعامِل ?? قيمة بديلة، لا تُستخدم إلا إذا كان المتغير null.

DART
void main() {
  String? nickname;
  print(nickname ?? "No nickname yet");
  nickname = "Momo";
  print(nickname);
}
تسمح ? بالقيمة null، وتوفّر ?? قيمة بديلة

اختبار المعرفة

تأكّد من أنك تذكّرت النقاط الأساسية في هذا الدرس.

  1. أيّ نوع في Dart مناسب لتخزين true أو false؟
    • int
    • String
    • bool
    • double
  2. ماذا يعني التصريح String? nickname؟
    • يمكن للمتغير nickname أن يحمل نصًا أو null
    • المتغير nickname مطلوب ويجب ملؤه
    • على المُصرِّف أن يخمّن نوع nickname
  3. مع int add(int a, int b) { return a + b; }، ماذا تعرض print(add(2, 3))؟
    • 2 + 3
    • 5
    • خطأ في الترجمة