Dart: ما هو، مميزات لغة Flutter والبرمجة

المؤلف: IT Sectr نُشر: 2026-02-10 وقت القراءة: 12 دق

Dart هي لغة برمجة من Google، أنشئت خصيصًا لإطار Flutter متعدد المنصات. تجمع بين الترجمة في الوقت المناسب (JIT) لإعادة التحميل السريع والترجمة المسبقة (AOT) للأداء الأصلي في إصدارات الإنتاج. تُستخدم Dart ليس فقط في تطوير تطبيقات المحمول ولكن أيضًا لتطبيقات الويب (AngularDart) والحلول من جانب الخادم. اعرف المزيد عن إمكانيات اللغة في التوثيق الرسمي لـ Dart.

الخلاصة

  • Dart — لغة Flutter التي أنشأتها Google، مع ترجمة JIT/AOT
  • Null safety — الأمان الصوتي للقيم الخالية منذ Dart 2.12 يضمن عدم وجود أخطاء null
  • Isolate — التوازي من خلال خيوط معزولة بدون ذاكرة مشتركة
  • Flutter — إطار واجهة المستخدم الذي يعرض الودجات عبر Skia/Impeller
  • Pub.dev — مدير الحزم مع أكثر من 45,000 مكتبة لـ Dart و Flutter

ما هو Dart؟

Dart هي لغة برمجة بتركيب يشبه لغة C، طورتها Google بقيادة لارس باك (منشئ Eclipse). كان الإصدار الأول في عام 2011، لكن Dart اكتسب شعبية حقيقية في عام 2018 مع إطلاق Flutter 1.0. صُممت اللغة لبناء واجهات المستخدم: فهي تدعم بشكل مدمج الـ Streams و Futures والأنماط التفاعلية.

فلسفة Dart هي «التوازن بين الأداء والإنتاجية». تدعم اللغة استراتيجيتين للترجمة: JIT (في الوقت المناسب) للتطوير مع إعادة التحميل السريع و AOT (مسبقة) لإصدارات الإنتاج بأداء أصلي. يقوم مترجم JIT بحقن الكود المعدل في تطبيق قيد التشغيل خلال ميلي ثانية، دون الحاجة إلى إعادة ترجمة APK — هذه هي الميزة الرئيسية لـ Dart مقارنة باللغات الأخرى في تطوير تطبيقات المحمول.

الميزة الرئيسية لـ Dart هي sound null safety، التي قدمت في Dart 2.12 (2021). يضمن نظام الأنواع أن المتغير لا يمكن أن يكون null دون تعريف صريح (int؟). هذا يلغي NullPointerException في وقت الترجمة. وفقًا لـ Google، أدى اعتماد null safety إلى تقليل معدلات الأعطال في تطبيقات Flutter بنسبة 30% في بيئات الإنتاج.

نظام Dart البيئي

النظام البيئي لـ Dart يشمل ثلاثة مجالات رئيسية: Flutter (تطبيقات المحمول وسطح المكتب)، AngularDart (تطبيقات الويب) و Dart Server (حلول الخادم). Flutter هي المنصة المهيمنة: وفقًا لـ Statista (2025)، يُستخدم Flutter في 46% من مشاريع تطبيقات المحمول عبر المنصات، متقدمًا على React Native (38%) و Xamarin (8%).

بناء جملة Dart: الأنواع، الدوال والكلاسات

بناء جملة Dart يشبه Java و JavaScript ولكنه يحتوي على تراكيب فريدة خاصة به. كل شيء في Dart هو كائن — حتى int و double و bool يرثون من Object. التنميط اختياري: المتغير المُصرح به كـ var يستنتج النوع تلقائيًا، لكن يُوصى بتحديد الأنواع بشكل صريح لتحسين القراءة والأداء.

الأنواع الأساسية والتعريفات

Dart تدعم int، double، String، bool، List، Set، Map، Record، Symbol و Runes. النوع القابل للقيمة الخالية — أي نوع باللاحقة ? (int?، String?). العامل ?? (الواعي للقيمة الخالية) يُرجع القيمة على اليمين إذا كانت القيمة على اليسار null. تدوين التسلسل (..) يسمح باستدعاء عدة دوال على نفس الكائن دون تكرار المرجع.

dart
// الأنواع الأساسية والتعريفات في Dart
void main() {
  // التنميط الصريح
  int age = 25;
  double price = 19.99;
  String name = 'Dart';
  bool isValid = true;

  // Null safety — المتغير يمكن أن يكون null
  int? nullableAge = null;
  int result = nullableAge ?? 0; // عامل الوعي بالقيمة الخالية

  // المجموعات مع الأدوية
  List<String> items = ['Dart', 'Flutter', 'Mobile'];
  Map<String, dynamic> config = {
    'version': '3.0',
    'mode': 'debug',
  };

  // تدوين التسلسل
  final list = <String>[]
    ..add('one')
    ..add('two')
    ..sort();
}

// Record — نوع غير قابل للتغيير مجهول
(String, int) user = ('Alice', 30);
print(user.$1); // 'Alice'

النوع dynamic يعطل التحقق من الأنواع — استخدمه فقط عند العمل مع JSON أو البيانات الديناميكية. Record هو نوع جديد في Dart 3.0 يسمح بتجميع القيم دون إنشاء كلاس منفصل. العامل الواعي للقيمة الخالية ?? هو الطريقة القياسية للعمل مع القيم القابلة للخواء، ليحل محل التحقق الطويل if-else.

الكلاسات والمكسينات

الكلاسات في Dart — وراثة مفردة (extends)، متعددة عبر mixins (mixin). لا تدعم Dart الواجهات كمفهوم منفصل — أي كلاس يمكن تطبيقه (implements). المكسين هو كلاس بدون مُنشئ يمكن إضافة دواله وحقوله إلى أي كلاس باستخدام الكلمة المفتاحية with.

dart
// الكلاسات، الوراثة والمكسينات في Dart
abstract class Animal {
  void sound(); // دالة مجردة
}

mixin Swimmer {
  void swim() => print('Swimming...');
}

mixin Flyer {
  void fly() => print('Flying...');
}

class Duck extends Animal with Swimmer, Flyer {
  @override
  void sound() => print('Quack!');
}

void main() {
  final duck = Duck();
  duck.sound(); // Quack!
  duck.swim();  // Swimming...
  duck.fly();   // Flying...
}

// منشئ مسمى
class Config {
  final String env;

  Config.development() : env = 'dev';
  Config.production()  : env = 'prod';
}

كلاس Duck يرث من Animal ويستخدم مكسينين — Swimmer و Flyer. هذا يُظهر الوراثة المتعددة دون مشاكل هيكل الماسة: يتم حل المكسينات خطيًا (super chain). المُنشئات المسماة (Config.development) هي بديل لدوال المصنع الثابتة لإنشاء كائنات بمعلمات محددة مسبقًا.

اللاتزامنية في Dart: Future، Stream و async/await

اللاتزامنية في Dart تُطبق من خلال Future (قيمة مفردة)، Stream (تسلسل قيم) و async/await. تستخدم Dart نموذج الخيط الواحد مع حلقة أحداث، مشابهًا لـ JavaScript، لكن مع فرق مهم: الحسابات الطويلة لا تحجب واجهة المستخدم لأن كود Dart يُنفذ في Isolate — خيط منفصل بدون ذاكرة مشتركة.

Future تمثل عملية غير متزامنة ستكتمل بعد وقت معين. يمكن أن يكون Future في حالة انتظار، أو مكتمل بقيمة، أو مكتمل بخطأ. سلسلة .then().catchError() هي بديل لـ async/await، لكن يُوصى باستخدام await لتحسين القراءة.

dart
// تحميل البيانات غير المتزامن مع Future و Stream
import 'dart:convert';
import 'package:http/http.dart' as http;

class ApiService {
  final String baseUrl;

  ApiService(this.baseUrl);

  // Future لطلب واحد
  Future<Map<String, dynamic>> fetchUser(int id) async {
    final response = await http.get(
      Uri.parse('$baseUrl/users/$id'),
    );

    if (response.statusCode == 200) {
      return jsonDecode(response.body);
    } else {
      throw Exception('Failed to load user: ${response.statusCode}');
    }
  }

  // Stream لتسلسل البيانات
  Stream<int> countStream(int max) async* {
    for (var i = 1; i <= max; i++) {
      await Future.delayed(Duration(seconds: 1));
      yield i;
    }
  }
}

void main() async {
  final api = ApiService('https://api.example.com');

  // استخدام await
  final user = await api.fetchUser(1);
  print('User: ${user['name']}');

  // معالجة Stream مع await for
  await for (final count in api.countStream(5)) {
    print('Count: $count');
  }
}

كلاس ApiService يُظهر نوعين من اللاتزامنية: Future لطلب HTTP (استجابة مفردة) و Stream لعداد تسلسلي (مولد مع async* و yield). Stream فعال للعمل مع أجهزة الاستشعار، تحديد المواقع، Firebase Realtime Database — في أي مكان تصل فيه البيانات باستمرار. يستخدم Isolate ذاكرة منفصلة — يتم نقل البيانات عبر SendPort/ReceivePort.

Dart و Flutter: بنية التطبيق

Dart و Flutter يشكلان مجموعة واحدة: Flutter هو إطار واجهة المستخدم، Dart هي لغة وصف واجهة المستخدم. في Flutter، كل شيء هو ودجة (Widget) — من زر إلى تطبيق كامل. الودجات可以是 stateful (بحالة قابلة للتغيير) و stateless (غير قابلة للتغيير). تصف Dart واجهة المستخدم التصريحية: build() يُرجع شجرة ودجات يقوم Flutter بعرضها باستخدام Skia (أو Impeller على iOS).

هيكل تطبيق Flutter

تطبيق Flutter في Dart يتكون من main() ← runApp(MyApp()) ← MaterialApp. تتضمن MaterialApp التوجيه (routes)، المظهر (theme) والتوطين. كل شاشة هي Scaffold تحتوي على AppBar، Body (عادة Column/ListView) و BottomNavigationBar. التنقل عبر Navigator.push/pop أو المسارات المسماة.

dart
// تطبيق Flutter بسيط في Dart
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Dart Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  int _counter = 0;

  void _increment() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Dart + Flutter')),
      body: Center(
        child: Text('Counter: $_counter'),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _increment,
        child: Icon(Icons.add),
      ),
    );
  }
}

ودجة HomeScreen هي StatefulWidget بحالة داخلية _counter. استدعاء setState() يُخطر Flutter بإعادة بناء واجهة المستخدم — كود Dart يُعيد تشغيل build()، منشئًا شجرة ودجات جديدة. يقارن Flutter بكفاءة (diff) الشجرة القديمة والجديدة، محدثًا فقط الأجزاء المتغيرة من الشاشة. Hot Reload يستبدل build() دون إعادة تعيين حالة _counter.

ترجمة Dart: JIT مقابل AOT

ترجمة Dart هجينة: JIT للتطوير و AOT للإنتاج. في وضع التصحيح، تقوم Dart VM بتشغيل مترجم JIT الذي يُفسر البايت كود مع إمكانية التبديل السريع للكود. في وضع الإصدار، يقوم dart compile exe أو flutter build بإنشاء ملف ثنائي AOT أصلي لمعمارية محددة (arm64، x86_64، armv7).

الوضعالترجمةسرعة التنفيذحجم الملف الثنائيإعادة التحميل السريع
DebugJIT (VM)متوسطة~50 ميغابايتنعم
ReleaseAOT (أصلي)قصوى~15-20 ميغابايتلا
Webdart2jsيعتمد على المتصفحمتغيرخادم التطوير

ترجمة JIT لـ Dart في وضع التصحيح توفر إعادة تحميل سريعة في ~1 ثانية — يرى المطورون تغييرات واجهة المستخدم دون فقدان حالة التطبيق. توفر ترجمة AOT أداءً قريبًا من تطبيقات Swift/Kotlin الأصلية. وفقًا لـ Google، يحقق Flutter على Dart AOT رسومًا متحركة بمعدل 60 إطارًا في الثانية حتى على الأجهزة المتوسطة.

أدوات مطور Dart

أدوات مطور Dart تشمل Dart SDK (مترجم dart، dartanalyzer، dartfmt، pub)، Flutter SDK وإضافات البيئة التطويرية. يُثبت Dart SDK مع Flutter SDK في مجلد flutter/bin/cache/dart-sdk. Pub هو مدير الحزم الذي يقرأ pubspec.yaml ويحمّل التبعيات من pub.dev.

الأدوات الرئيسية

dart analyze — محلل ثابت يتحقق من الأنواع، الاستيرادات غير المستخدمة والأخطاء المحتملة. dart format — منسق يقوم بتنسيق الكود تلقائيًا بأسلوب موحد. dart doc — مولد توثيق من تعليقات ///. Flutter DevTools — ملف تعريف مع فاحص شجرة الودجات، السجلات، الذاكرة والشبكة. Dart VM Service — تصحيح تطبيق قيد التشغيل عبر WebSocket.

yaml
# pubspec.yaml — إعداد مشروع Dart
name: my_flutter_app
description: A new Flutter project.
version: 1.0.0

environment:
  sdk: '>=3.0.0 <4.0.0'

dependencies:
  flutter:
    sdk: flutter
  http: ^1.2.0
  provider: ^6.1.0
  shared_preferences: ^2.2.0
  json_annotation: ^4.8.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  build_runner: ^2.4.0
  json_serializable: ^6.7.0
  flutter_lints: ^3.0.0

ملف pubspec.yaml يصف تبعيات مشروع Dart. حقل environment:sdk يُحدد إصدار Dart — الإصدار المستقر الحالي هو 3.x. Dependencies هي المكتبات الرئيسية، dev_dependencies للاختبار وتوليد الكود. json_annotation + json_serializable يولدان كود تسلسل JSON عبر build_runner. flutter_lints هي مجموعة قواعد للمحلل.

الأسئلة الشائعة

ما هو Dart؟

Dart هي لغة برمجة من Google (2011)، صُممت للتطوير عبر المنصات مع Flutter. تدعم تركيبًا يشبه C، تنميطًا قويًا، ترجمة JIT و AOT. تتميز بـ sound null safety (منذ Dart 2.12) واللاتزامنية عبر Future و Stream. تُستخدم لتطبيقات المحمول والويب وسطح المكتب.

ما الفرق بين Dart و JavaScript؟

Dart تُترجم إلى كود أصلي (AOT) أو JS (dart2js)، JavaScript يُفسر. Dart لديها تنميط قوي مع sound null safety، كلاسات مدمجة ومكسينات. اللاتزامنية في Dart مبنية على Isolate (خيوط منفصلة بدون ذاكرة مشتركة)، JS — على حلقة الأحداث مع Web Workers. أداء Dart AOT أعلى بنسبة 30-50% من V8 JIT في سيناريوهات تطبيقات المحمول.

كيف تُترجم Dart إلى تطبيق محمول؟

Dart تُترجم AOT إلى كود ARM أصلي عبر Dart Native. في وضع التصحيح، تستخدم Dart VM JIT مع إعادة التحميل السريع. محرك Flutter (C++) يعرض واجهة المستخدم عبر Skia/Impeller. لنظام Android — flutter build apk، لنظام iOS — flutter build ios. بناء الويب يستخدم dart2js أو dart2wasm. حجم APK للإصدار هو 15-20 ميغابايت (بدون تقسيم AAB).

ما أنواع البيانات التي يدعمها Dart؟

Dart يدعم الأنواع الأولية: int، double، String، bool. المجموعات: List، Set، Map، Record. أنواع خاصة: Symbol، Runes، Null. كل شيء هو كائن، بما في ذلك الأنواع الأولية. أمان القيم الخالية: int? يسمح بـ null، int ليس null أبدًا. العوامل ??، ??= للتعامل الآمن مع null. الأدوية: List<String>، Map<String, dynamic>.

ما الأدوات المطلوبة لتطوير Dart؟

Flutter SDK يشمل Dart SDK، محرك Flutter ومكتبة الودجات. البيئة التطويرية — Android Studio أو VS Code مع إضافة Flutter. DevTools — ملف تعريف مع فاحص الودجات. Pub.dev — مدير حزم مع أكثر من 45,000 مكتبة. أدوات dart analyze و dart format لضمان جودة الكود. Build_runner لتوليد كود نماذج JSON.

الملخص

  • Dart — لغة Google لـ Flutter، تجمع بين تطوير JIT وأداء AOT
  • Sound null safety منذ Dart 2.12 (+3.0) — حماية إلزامية من null على مستوى الأنواع
  • اللاتزامنية عبر Future (نتيجة مفردة)، Stream (تسلسل)، Isolate (توازي)
  • Flutter — إطار واجهة مستخدم تصريحي حيث كل شيء هو ودجة (StatelessWidget / StatefulWidget)
  • Hot Reload — إعادة تحميل كود JIT في ~1 ثانية دون فقدان حالة التطبيق
  • Pub.dev — نظام حزم (أكثر من 45,000) يُدار عبر pubspec.yaml
  • Flutter DevTools — ملف تعريف مع فاحص الودجات والذاكرة والشبكة

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا