أساسيات برمجة Dart

مقدمة إلى Dart وإعداد بيئة التطوير

25 دقيقة الدرس 1 من 6

ما هو Dart؟

Dart هي لغة برمجة حديثة مفتوحة المصدر طورتها Google. تم إصدارها لأول مرة في عام 2011 وأصبحت منذ ذلك الحين اللغة الأساسية لبناء التطبيقات باستخدام Flutter. صُممت Dart لتكون سهلة التعلم وسريعة التنفيذ وقادرة على العمل على منصات متعددة -- الهاتف والويب وسطح المكتب والخادم.

Dart هي لغة ذات أنواع ثابتة وكائنية التوجه بصياغة مألوفة إذا كنت تعرف JavaScript أو Java أو C#. تُترجم إلى كود آلة أصلي للهاتف وسطح المكتب، وإلى JavaScript للويب، وتعمل على آلتها الافتراضية (Dart VM) أثناء التطوير.

لماذا تتعلم Dart؟

إليك الأسباب الرئيسية لتعلم Dart:

  • لغة Flutter -- Dart هي اللغة الوحيدة المستخدمة في Flutter، أشهر إطار عمل متعدد المنصات لبناء تطبيقات الهاتف والويب وسطح المكتب من قاعدة كود واحدة.
  • سهلة التعلم -- إذا كنت تعرف أي لغة بأسلوب C (مثل JavaScript أو Java أو C#)، ستبدو صياغة Dart طبيعية وبديهية.
  • أداء سريع -- تُترجم Dart إلى كود آلة ARM و x64 أصلي مما يعطي أداءً قريبًا من الأصلي على الأجهزة المحمولة.
  • إعادة التحميل السريع -- أثناء التطوير، تمكّن ترجمة JIT في Dart ميزة إعادة التحميل السريع الشهيرة في Flutter مما يتيح لك رؤية التغييرات فوراً.
  • أمان القيم الفارغة -- تمتلك Dart أمان قيم فارغة مدمج يزيل فئة كاملة من أخطاء وقت التشغيل في وقت الترجمة.
  • نظام بيئي متنامي -- مع آلاف الحزم على pub.dev يمكنك توسيع تطبيقاتك بحلول جاهزة.

أوضاع ترجمة Dart

تستخدم Dart استراتيجيتين مختلفتين للترجمة حسب السياق:

  • JIT (في الوقت المناسب) -- تُستخدم أثناء التطوير. يُترجم الكود أثناء التشغيل مما يمكّن ميزات مثل إعادة التحميل السريع والتصحيح. تنفيذ أبطأ قليلاً لكن دورة تطوير أسرع.
  • AOT (مسبقاً) -- تُستخدم لبناء الإنتاج. يُترجم الكود إلى كود آلة أصلي قبل التنفيذ مما يؤدي إلى أوقات بدء سريعة وأداء محسّن.
ملاحظة: هذا النهج المزدوج في الترجمة هو أحد أكبر مزايا Dart. تحصل على أفضل ما في العالمين: تطوير سريع مع JIT وتطبيقات إنتاج سريعة مع AOT.

إعداد Dart

هناك عدة طرق لإعداد Dart على جهازك. بما أننا سنستخدم Flutter في النهاية سنغطي كلاً من Dart المستقل و Flutter SDK (الذي يتضمن Dart).

الخيار 1: تثبيت Dart المستقل

إذا أردت تعلم Dart قبل الغوص في Flutter:

macOS (باستخدام Homebrew)

brew tap dart-lang/dart
brew install dart

Windows (باستخدام Chocolatey)

choco install dart-sdk

Linux (باستخدام apt)

sudo apt update
sudo apt install dart

الخيار 2: تثبيت Flutter SDK (يتضمن Dart)

عند تثبيت Flutter يتم تضمين Dart SDK تلقائياً. هذا هو النهج الموصى به لأنك ستحتاج Flutter لاحقاً في هذه الدورة.

التحقق من التثبيت

dart --version
# Output: Dart SDK version: 3.x.x

الخيار 3: استخدام DartPad (بدون تثبيت)

إذا أردت البدء بالبرمجة فوراً بدون تثبيت أي شيء، قم بزيارة DartPad على dartpad.dev. إنه محرر عبر الإنترنت حيث يمكنك كتابة وتشغيل ومشاركة كود Dart مباشرة في متصفحك.

نصيحة: DartPad ممتاز للتجارب السريعة ومتابعة الدروس. لكن للمشاريع الحقيقية ستحتاج تثبيتاً محلياً مع محرر مثل VS Code أو Android Studio.

برنامجك الأول في Dart

كل برنامج Dart يبدأ بدالة main(). هذه هي نقطة الدخول -- أول دالة تنفذها Dart عند تشغيل برنامجك.

مرحبا بالعالم في Dart

void main() {
  print('مرحبا بالعالم!');
}

دعنا نحلل هذا:

  • void -- نوع الإرجاع. void تعني أن هذه الدالة لا تُرجع أي قيمة.
  • main() -- اسم الدالة. تبحث Dart دائماً عن main() كنقطة بداية.
  • print() -- دالة مدمجة تطبع النص في وحدة التحكم.
  • 'مرحبا بالعالم!' -- نص حرفي محاط بعلامات اقتباس مفردة.

تشغيل برنامجك

# احفظ الكود في ملف اسمه hello.dart
# ثم شغله من الطرفية:
dart run hello.dart

# المخرجات:
# مرحبا بالعالم!

بنية برنامج Dart

ملف Dart النموذجي له البنية التالية:

بنية ملف Dart الأساسية

// 1. عبارات الاستيراد (المكتبات التي تحتاجها)
import 'dart:math';

// 2. متغيرات المستوى الأعلى (اختياري)
const String appName = 'تطبيقي الأول';

// 3. الدالة الرئيسية (نقطة الدخول)
void main() {
  print('مرحباً بك في $appName');
  print('رقم عشوائي: ${Random().nextInt(100)}');
}

// 4. دوال وفئات أخرى (اختياري)
String greet(String name) {
  return 'مرحباً $name!';
}

ملاحظات رئيسية:

  • كل عبارة تنتهي بفاصلة منقوطة (;).
  • التعليقات ذات السطر الواحد تستخدم // والتعليقات متعددة الأسطر تستخدم /* */.
  • تستخدم Dart استيفاء النصوص مع $variable أو ${expression} داخل النصوص.
  • تُعرّف الدوال بنوع الإرجاع والاسم والمعاملات.

إعداد محرر الكود

للحصول على أفضل تجربة تطوير استخدم VS Code أو Android Studio مع إضافات Dart و Flutter.

إعداد VS Code

  1. ثبّت VS Code من code.visualstudio.com.
  2. افتح الإضافات (Ctrl+Shift+X أو Cmd+Shift+X).
  3. ابحث عن إضافة Dart بواسطة Dart Code وثبّتها.
  4. اختيارياً ثبّت إضافة Flutter (التي تثبت Dart أيضاً).

توفر إضافة Dart تمييز الصياغة وإكمال الكود والتصحيح وأدوات إعادة البناء وتحليل Dart المدمج.

Dart مقارنة بلغات أخرى

إذا كنت قادماً من لغة أخرى إليك كيف تقارن Dart:

  • مقابل JavaScript -- Dart ذات أنواع ثابتة (تُفحص الأنواع في وقت الترجمة) ولديها أمان قيم فارغة وتُترجم إلى كود أصلي. JavaScript ذات أنواع ديناميكية وتعمل في المتصفحات.
  • مقابل Java -- Dart لديها صياغة أكثر إيجازاً ولا حاجة لكلمة new ولديها async/await مدمج واستدلال أنواع أفضل.
  • مقابل Swift/Kotlin -- ميزات حديثة مماثلة لكن Dart تستهدف جميع المنصات عبر Flutter وليس فقط iOS أو Android.

مقارنة Dart مع JavaScript

// JavaScript
function greet(name) {
  return `Hello, ${name}!`;
}
console.log(greet("World"));

// Dart
String greet(String name) {
  return 'مرحباً $name!';
}
void main() {
  print(greet('العالم'));
}
خطأ شائع: على عكس JavaScript تتطلب Dart منك تحديد نوع معاملات الدالة وقيمة الإرجاع (أو استخدام var/dynamic للمرونة). نسيان الأنواع سيسبب أخطاء وقت الترجمة. هذه الصرامة في الواقع ميزة -- فهي تكتشف الأخطاء قبل تشغيل الكود.

تمرين عملي

افتح DartPad على dartpad.dev واكتب برنامج Dart يطبع اسمك ولغة البرمجة المفضلة لديك ولماذا تريد تعلم Dart. استخدم استيفاء النصوص مع صيغة $. مثال: print('اسمي $name');. جرب إنشاء دالة منفصلة تُرجع نص ترحيب.