تعلّم كيفية تخزين القيم في متغيرات ذات أنواع، وكتابة الدوال، وفهم الحماية من القيمة null.
افتح هذا الدرس في Kodokonقبل بناء الشاشات، لنتعلّم أساسيات Dart، لغة Flutter. إن المتغير صندوق عليه ملصق في ذاكرة الحاسوب، تخزّن فيه قيمة لإعادة استخدامها لاحقًا. وفي Dart، لكل متغير نوع: أي طبيعة ما يمكنه احتواؤه. والأنواع الأربعة الأكثر شيوعًا هي int (عدد صحيح، مثل 28)، وdouble (عدد عشري، مثل 1.65)، وString (سلسلة من الأحرف، أي نص بين علامات اقتباس) وbool (قيمة منطقية: إما true أو false). وتتيح الكلمة المفتاحية var لـ 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، تُصرِّح بمتغير لا يمكن أن يتغير أبدًا بعد تلقّيه قيمته الأولى: استخدمها حالما تكون هناك قيمة لا يُفترض أن تتطور.
void main() {
final city = "Lyon";
var temperature = 21;
print("In $city, it is $temperature degrees.");
}إن الدالة كتلة صغيرة من الكود قابلة لإعادة الاستخدام، لها اسم، وقد تتلقّى وسائط (parameters) (قيم مُدخَلة، بين قوسين)، ويمكنها أن تُرجِع نتيجة باستخدام الكلمة المفتاحية return. وتُصرِّح بها بكتابة نوع النتيجة أولًا، ثم اسمها، ثم وسائطها. ويعني النوع void "لا يُرجِع شيئًا": وهذا هو حال main، نقطة دخول البرنامج.
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.
void main() {
String? nickname;
print(nickname ?? "No nickname yet");
nickname = "Momo";
print(nickname);
}? بالقيمة null، وتوفّر ?? قيمة بديلةString? nickname؟int add(int a, int b) { return a + b; }، ماذا تعرض print(add(2, 3))؟