I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

وداعاً لـ build_runner: مستقبل Dart مع الـ Macros وتوليد الكود التلقائي

وداعاً لـ build_runner: مستقبل Dart مع الـ Macros وتوليد الكود التلقائي أكيد مبرمج فلاتر (Flutter) أو دارت (Dart) عارف الشعور "المزعج" لما بتيجي تعمل موديل جديد

وداعاً لـ build_runner: مستقبل Dart مع الـ Macros وتوليد الكود التلقائي
Reading Count: 6

وداعاً لـ build_runner: مستقبل Dart مع الـ Macros وتوليد الكود التلقائي

أكيد مبرمج فلاتر (Flutter) أو دارت (Dart) عارف الشعور "المزعج" لما بتيجي تعمل موديل جديد وتضطر تستخدم مكتبات زي json_serializable، وتفضل مستني الـ build_runner يخلص "Build" عشان ينشئ ملفات الـ g.dart المزعجة. الموضوع ده مش بس بياخد وقت، ده كمان بيخلي الكود بتاعك زحمة ومحتاج تحديث مستمر. طيب إيه رأيك لو قلتلك إن المطورين في فريق دارت شغالين على ميزة هتغير قواعد اللعبة تماماً؟ إحنا بنتكلم عن الـ Macros.

إيه هي الـ Macros في دارت (Dart Macros) وليه هي ثورية؟

الـ Macros ببساطة هي طريقة بتسمح للغة دارت إنها تعدل الكود بتاعك وتضيف عليه "أكواد تانية" وأنت لسه بتكتب، مش بعد ما تعمل Build. الفرق الجوهري هنا إنها بتشتغل أثناء مرحلة الـ Compilation يعني الكود بيتولد "أونلاين" جوه المشروع من غير ما تحتاج ملفات خارجية أو أدوات توليد كود (Code Generation Tools) تقيلة على الجهاز.

تخيل إنك بتكتب كلاس بسيط، وبتضيف عليه "وسم" (Annotation) بسيط، واللغة لوحدها بتفهم إنك عايز تحول الداتا دي لـ JSON وترجعها تاني، كل ده من غير ما تلمس التيرمينال أو تنتظر ثواني طويلة.

التحول من build_runner إلى الـ Macros

المشكلة الأساسية في الـ Build Runner إنه بيشتغل كأداة منفصلة بره الكومبايلر نفسه، وده بيسبب بطء كبير في المشاريع الضخمة. الـ Macros جاية عشان تندمج جوه الـ Dart Compiler نفسه. ده معناه:

  • سرعة أكبر في التطوير (Development Speed).
  • كود أسهل في القراءة ومفيش ملفات زايدة (Clean Code).
  • دعم كامل من الـ IDE (مثل VS Code أو Android Studio) يخليك تشوف الكود المولد قدام عينك.

مثال عملي: كيف ستبدو الـ JSON Serialization

في المستقبل القريب، بدل ما تكتب كود طويل وتستخدم المكتبات التقليدية، ممكن يكون الكود بتاعك بالشكل ده:


@JsonCodable()
class User {
  final String name;
  final int age;
  
  User(this.name, this.age);
}

بمجرد إضافة الـ Annotation اللي اسمه JsonCodable، الـ Macro هيقوم بإنشاء دوال الـ fromJson والـ toJson تلقائياً. الميزة هنا إنك مش هتحتاج تعمل `dart run build_runner build` تاني أبداً، الكومبايلر هو اللي هيتولى المهمة دي لحظة بلحظة.

مستقبل التوليد التلقائي للكود

الـ Macros مش بس للـ JSON، دي مجرد البداية. تخيل إنك ممكن تعمل Data Classes، أو Equality Operators، أو حتى Dependency Injection بطريقة أسهل بكتير. الـ Macros بتفتح باب لمطوري المكتبات (Library Authors) إنهم يعملوا أدوات قوية جداً من غير ما المطور العادي يحس بأي تعقيد.

نصيحة من أخ لمبرمجي فلاتر

عايز أقولك يا صديقي المبرمج، المجال التقني سريع جداً. صحيح الـ Macros لسه في مراحلها الأولى (Experimental)، لكن ده الوقت المناسب إنك تتابع التحديثات وتفهم الأساسيات. لا تكتفي فقط بكتابة الكود التقليدي، بل ابحث دائمًا عن "ليه" الميزة دي موجودة. طور نفسك في فهم الـ Metaprogramming، لأن ده التوجه القادم في لغات البرمجة الحديثة مش بس في دارت.

خليك دايماً متابع لـ Dart Roadmaps، وجرب النسخ التجريبية (Flutter/Dart Beta) عشان تكون أول واحد بيستخدم التقنيات الجديدة دي في تطبيقاته. بالتوفيق في رحلتك البرمجية!


Share

Related posts

Jun 21, 2026 • 1 min read
Reading Count: 2
وداعاً لـ Moment.js و Day.js: مستقبل التعامل مع التواريخ باستخدام Temporal API

وداعاً لـ Moment.js و Day.js: مستقبل التعامل مع التواريخ باستخدام Temporal API لو كنت مبرمج JavaScri...

Jun 21, 2026 • 1 min read
Reading Count: 8
محرك الرندر Impeller في Flutter: وداعاً لمشكلة الـ Janky Animations والتقطيع

محرك الرندر Impeller في Flutter: وداعاً لمشكلة الـ Janky Animations والتقطيع لو كنت مبرمج فلاتر (Flu...

Jun 20, 2026 • 1 min read
Reading Count: 8
إزاي تشغل تطبيقات فلاتر (Flutter) على الويب بسرعة خرافية باستخدام ويب اسمبلي (WebAssembly)؟

إزاي تشغل تطبيقات فلاتر (Flutter) على الويب بسرعة خرافية باستخدام ويب اسمبلي (WebAssembly)؟ لو أنت م...