Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

ورقة Dart المرجعية

آخر تحديث

Hello World وبنية البرنامج

كل برنامج Dart يبدأ من دالة main على المستوى الأعلى.

العمليةالصياغة
نقطة الدخولvoid main() { ... }
طباعة سطرprint("Hello, World!");
استيفاء السلاسل النصيةprint("Hi $name");
تعبير في الاستيفاءprint("Sum: ${a + b}");
تعليق// this is a comment
تعليق متعدد الأسطر/* ... */
استيراد مكتبةimport 'dart:math';
تشغيل ملفdart run main.dart

المتغيرات والأنواع

Dart ذات أنواع ساكنة لكن يمكنها استنتاج الأنواع بـ var.

العمليةالصياغة
متغير مستنتَجvar age = 30;
نوع صريحint age = 30;
ثابت وقت الترجمةconst pi = 3.14;
ثابت وقت التشغيلfinal name = getName();
الأنواع الأساسيةint, double, String, bool
النوع الديناميكيdynamic x = 5;
تحويل النوعint.parse("42"), n.toString()
فحص النوعx is String, x as String

أمان Null

الأنواع غير قابلة لأن تكون null افتراضيًا؛ أضِف ? للسماح بـ null.

العمليةالصياغة
غير قابل لأن يكون null (افتراضي)int count = 0;
نوع قابل لأن يكون nullString? name;
وصول واعٍ بـ nulluser?.name
دمج nullname ?? "default"
إسناد بدمج nullname ??= "default";
تأكيد عدم كونه nullname!
تهيئة متأخّرةlate String value;
نشر واعٍ بـ null[...?maybeList]

السلاسل النصية

السلاسل النصية تدعم علامات الاقتباس المفردة والمزدوجة والثلاثية.

العمليةالصياغة
الطولs.length
الأحرف الكبيرة / الصغيرةs.toUpperCase(), s.toLowerCase()
الاستيفاء"Total: $price"
الدمج"foo" + "bar"
الاحتواءs.contains("ell")
يبدأ / ينتهي بـs.startsWith("he")
التقسيم"a,b,c".split(",")
الاستبدالs.replaceAll("a", "b")
سلسلة فرعيةs.substring(0, 3)
إزالة المسافاتs.trim()

المجموعات (List و Map و Set)

ثلاثة أنواع مجموعات أساسية بصياغة حرفية.

العمليةالصياغة
قائمة حرفيةvar nums = [1, 2, 3];
الإضافة إلى قائمةnums.add(4);
الوصول / الطولnums[0], nums.length
Map / wherenums.map((n) => n * 2), nums.where((n) => n > 1)
خريطة حرفيةvar ages = {"Ada": 30};
الوصول إلى خريطةages["Ada"]
مجموعة حرفيةvar ids = {1, 2, 3};
عامل النشر (spread)var all = [...a, ...b];
if / for في المجموعة[if (show) 1, for (n in xs) n]

التحكم في التدفق

الشروط توضع بين أقواس؛ و switch تدعم الأنماط.

العمليةالصياغة
If / elseif (x > 0) { ... } else { ... }
الشرطي الثلاثيvar r = x > 0 ? "pos" : "neg";
Switchswitch (n) { case 1: ...; default: ... }
حلقة forfor (var i = 0; i < 10; i++) { ... }
حلقة for-infor (var item in items) { ... }
forEachitems.forEach((x) => print(x));
حلقة whilewhile (x < 100) { ... }
Do-whiledo { ... } while (x < 100);
Break / continuebreak;, continue;

الدوال

الدوال من الدرجة الأولى؛ وصياغة السهم تختصر التعبيرات المفردة.

العمليةالصياغة
تعريف دالةint add(int a, int b) { return a + b; }
دالة سهميةint square(int x) => x * x;
موضعي اختياريvoid log(String m, [int? code]) { ... }
معاملات مسمّاةvoid box({int w = 0, int h = 0}) { ... }
مسمّى مطلوبvoid box({required int w}) { ... }
دالة مجهولة الاسمvar f = (x) => x * 2;
التمرير كوسيطnums.map((n) => n * 2)
Typedeftypedef IntOp = int Function(int);

الأصناف والبواني

الأصناف تحمل الحالة والسلوك؛ والبواني تأتي بعدة أشكال.

العمليةالصياغة
تعريف صنفclass Point { int x; int y; }
باني (constructor)Point(this.x, this.y);
باني مسمّىPoint.origin() : x = 0, y = 0;
إنشاء نسخةvar p = Point(1, 2);
دالةdouble dist() { ... }
Getterint get area => w * h;
الوراثةclass Circle extends Shape { ... }
نداء supersuper(args)
صنف مجرّدabstract class Shape { ... }
تنفيذ واجهةclass Dog implements Animal { ... }

غير المتزامن (Future / async-await)

الـ futures تمثّل قيمًا تتوفّر لاحقًا؛ و await يوقف التنفيذ حتى تُحلّ.

العمليةالصياغة
دالة asyncFuture<int> load() async { ... }
انتظار futurevar data = await load();
إرجاع قيمةreturn 42; داخل دالة async
تأخيرawait Future.delayed(Duration(seconds: 1));
معالجة الأخطاءtry { await load(); } catch (e) { ... }
تسلسل thenload().then((v) => print(v));
التشغيل بالتوازيawait Future.wait([a(), b()]);
تدفّق غير متزامنawait for (var x in stream) { ... }

صياغة Dart التي تستخدمها أكثر من غيرها، على صفحة واحدة. ورقة Dart المرجعية هذه هي مرجع سريع للّغة الأساسية - المتغيرات والأنواع، وأمان null، والسلاسل النصية، والمجموعات، والتحكم في التدفق، والدوال، والأصناف، والـ futures و async/await التي تستخدمها لكتابة التطبيقات خلف Flutter.

كل ما هنا هو Dart قياسية تعمل على SDK الرسمية. انسخ ما تحتاجه، أو جرّب كل مقطع برمجي مباشرة في playground الخاص بـ Dart - دون الحاجة إلى أي تثبيت.

الأسئلة الشائعة حول ورقة Dart المرجعية

هل ورقة Dart المرجعية هذه مجانية؟
نعم. ورقة Dart المرجعية هذه مجانية تمامًا، دون الحاجة إلى التسجيل. أضِفها إلى المفضلة وارجع إليها متى احتجت إلى البحث عن عامل أمان null أو دالة مجموعة أو نمط غير متزامن.
كيف يعمل أمان null في Dart؟
في Dart، كل نوع غير قابل لأن يكون null افتراضيًا - فـ int count لا يمكن أن يحمل null أبدًا. وللسماح بـ null تضيف ? (String? name)، فيُجبرك المترجم حينها على معالجة حالة null. وتجعل المساعدات ذلك موجزًا: ?. للوصول الواعي بـ null، و ?? لقيمة احتياطية، و ! لتأكيد أن القيمة ليست null عندما تكون متيقّنًا. ويلتقط هذا أخطاء null في وقت الترجمة بدلًا من وقت التشغيل.
ما هو الـ Future وكيف تعمل async و await؟
يمثّل الـ Future قيمة ستتوفّر لاحقًا، مثل نتيجة نداء شبكي. ووسم دالة بـ async يتيح لك استخدام await، الذي يوقف التنفيذ حتى يكتمل الـ future ثم يمنحك القيمة - فتكتب كودًا غير متزامن يُقرأ من الأعلى إلى الأسفل كأنه متزامن. غلّف الـ awaits بـ try/catch لمعالجة الأخطاء.
هل يمكنني التدرّب على Dart عبر الإنترنت؟
نعم. افتح playground الخاص بـ Dart لتشغيل أيّ مقطع برمجي من هذه الورقة المرجعية في متصفحك - دون الحاجة إلى تثبيت أي SDK. وعندما ترغب في تعلّم منظّم، تأخذك دورة Dart التفاعلية المجانية من Coddy من أمان null والمجموعات إلى الأصناف و async/await خطوة بخطوة.
هل هذه الورقة المرجعية مناسبة للمبتدئين؟
نعم. إنها مرتّبة من المواضيع الأكثر شيوعًا (المتغيرات وأمان null والتحكم في التدفق) وصولًا إلى المتقدمة (الأصناف و futures و async/await)، بحيث يمكنك استخدام الأقسام العلوية من اليوم الأول والتدرّج إلى البقية.
Coddy programming languages illustration

تعلّم Dart مع Coddy

ابدأ الآن