مقدمة إلى Dart وإعداد بيئة التطوير
ما هو 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
هناك عدة طرق لإعداد 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 مباشرة في متصفحك.
برنامجك الأول في 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
- ثبّت VS Code من
code.visualstudio.com. - افتح الإضافات (Ctrl+Shift+X أو Cmd+Shift+X).
- ابحث عن إضافة Dart بواسطة Dart Code وثبّتها.
- اختيارياً ثبّت إضافة 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('العالم'));
}
var/dynamic للمرونة). نسيان الأنواع سيسبب أخطاء وقت الترجمة. هذه الصرامة في الواقع ميزة -- فهي تكتشف الأخطاء قبل تشغيل الكود.تمرين عملي
افتح DartPad على dartpad.dev واكتب برنامج Dart يطبع اسمك ولغة البرمجة المفضلة لديك ولماذا تريد تعلم Dart. استخدم استيفاء النصوص مع صيغة $. مثال: print('اسمي $name');. جرب إنشاء دالة منفصلة تُرجع نص ترحيب.