php //// End //// ?>
Instructor
كثير من المبتدئين يبدؤون رحلة تعلم Flutter مباشرة، ثم يكتشفون أن المشكلة الحقيقية ليست في Flutter نفسها، بل في ضعف فهم لغة Dart التي تُبنى عليها التطبيقات.
ومع كثرة المصادر المتفرقة والمحتوى الذي ينتقل بسرعة إلى المفاهيم المتقدمة، يصبح من الصعب تكوين أساس برمجي متين يساعد على فهم الكود وكتابة البرامج باحترافية؛ لذلك جاءت هذه الدورة لتقديم مسار واضح ومنظم يبدأ من الصفر تمامًا.
دورة شاملة لتعلُّم لغة Dart من الصفر، تغطي المتغيرات والشروط والحلقات والدوال وهياكل البيانات والبرمجة الكائنية (OOP)، وميزات Dart الحديثة مثل Mixin وEnum وExtensions، لتكوين أساس قوي قبل تعلم Flutter.
تضم الدورة 58 حلقة تبدأ بأساسيات اللغة وأنواع البيانات والعمليات المختلفة، ثم تنتقل إلى الشروط والحلقات التكرارية والدوال وهياكل البيانات مثل List وMap، قبل التعمق في البرمجة الكائنية ومفاهيمها الأساسية.
هذه الدورة ملائمة للمبتدئين الذين يريدون تعلم Dart تعلمًا صحيحًا من البداية، ولمن يخطط لدخول عالم Flutter ويحتاج إلى أساس قوي قبل البدء في تطوير التطبيقات.
بنهاية الدورة ستكون قادرًا على فهم وكتابة أكواد Dart والتعامل مع المشروعات البرمجية بصورة منظمة، والانتقال إلى تعلُّم Flutter وأنت تمتلك الأساس الذي تعتمد عليه معظم التطبيقات الحديثة.
Check the frequently asked questions about this course.
Explore newly published courses and stay updated.
This course includes 8 modules, 58 lessons, and 0 hours of materials.
في هذه الحلقة سأصحبك في بداية رحلتنا مع لغة Dart، وسنتعرف معًا على مفهوم البرمجة بطريقة سهلة وعملية بعيدًا عن التعقيد.
وسأوضح لك كيف تعتمد البرامج التي نستخدمها يوميًا على مجموعة من الأوامر والتعليمات، ولماذا تُعد البرمجة وسيلة لحل المشكلات وبناء التطبيقات التي تخدم المستخدمين.
وسنتعرف معا إلى معنى الـ Code ودوره في تنفيذ المهام المختلفة، لتكوّن تصورًا واضحًا عن الأساس الذي سنبني عليه كل ما سنتعلمه خلال الدورة.
في هذه الحلقة سأوضح لك لماذا أصبحت البرمجة جزءًا أساسًا من حياتنا اليومية، وكيف تُستخدم في مجالات وتطبيقات مختلفة من حولنا.
وسنتعرف بصورة سهلة على الطريقة التي تتعامل بها الأجهزة مع الأوامر والتعليمات، وكيف تتحول المدخلات إلى نتائج يمكننا الاستفادة منها في البرامج والتطبيقات التي نستخدمها كل يوم.
في هذه الحلقة سأشرح لك كيف يفهم الكمبيوتر التعليمات التي نكتبها، ولماذا نستخدم لغات البرمجة بدلًا من التعامل المباشر مع لغة الآلة.
وسنتعرف إلى المراحل التي مرت بها لغات البرمجة حتى وصلت إلى صورتها الحالية، والدور الذي تقوم به الأدوات المسؤولة عن تحويل الكود إلى لغة يفهمها الجهاز.
وفي النهاية سأوضح لك لماذا يُعد إتقان لغة واحدة مثل Dart خطوة مهمة للانطلاق في عالم البرمجة.
في هذه الحلقة سأعرِّفك على المسار الكامل الذي سنسير فيه خلال الدورة، بدايةً من المفاهيم الأساسية في البرمجة حتى الموضوعات الأكثر تقدّمًا في لغة Dart.
وستتعرف إلى المهارات التي ستكتسبها خلال الرحلة، وكيف تساعدك هذه الأساسيات على الاستعداد للانتقال إلى Flutter والبدء في تطوير تطبيقات الهواتف المحمولة.
في هذه الحلقة سأشارك معك مجموعة من النصائح والتجارب العملية التي ستساعدك على الاستفادة من الدورة استفادة أفضل.
سنتحدث عن أفضل طريقة لمشاهدة الدروس والتطبيق عليها، وكيفية التعامل مع التمارين والمشكلات البرمجية، وأهمية تدوين الملاحظات وتنظيم المعلومات في أثناء التعلم.
وسأوضح لك الطريقة الصحيحة للاستفادة من أدوات الذكاء الاصطناعي والمصادر الإضافية دون التأثير على عملية التعلم، حتى تبني أساسًا قويًّا وتحقق أكبر استفادة ممكنة خلال رحلتك مع الدورة.
في هذه الحلقة سنبدأ العمل عمليًّا داخل بيئة التطوير، سأرشدك إلى خطوات إنشاء أول مشروع بلغة Dart والتعرف على أهم الملفات التي سنستخدمها خلال الدورة.
وسنكتب أول كود برمجي ونشغله أول مرة، وسنتعرف إلى نقطة بداية تنفيذ البرنامج، إضافة إلى استخدام التعليقات البرمجية ودورها في تنظيم الكود وتوثيقه في أثناء العمل.
في هذه الحلقة سنبدأ التعرف إلى أحد أهم المفاهيم الأساسية في البرمجة، وهو المتغيرات وكيفية استخدامها لتخزين البيانات والتعامل معها داخل البرامج.
وسأشرح لك طريقة إنشاء المتغيرات، وأشهر أنواع البيانات التي ستستخدمها باستمرار في Dart، إضافة إلى قواعد التسمية الصحيحة وأهم الملاحظات التي تساعدك على تجنب الأخطاء الشائعة.
وسنتعرف على كيفية عرض البيانات واستخدامها داخل النصوص بطريقة أكثر مرونة في أثناء كتابة الكود.
في هذه الحلقة سنتعرف إلى مجموعة من الأدوات المهمة التي تساعدنا على التعامل مع الأرقام العشرية وعرضها بالطريقة الملائمة داخل التطبيقات.
وسأوضح لك أشهر الطرق المستخدمة للتحكم في طريقة ظهور الأرقام، والفرق بين أساليب التقريب المختلفة، ومتى يُفضَّل استخدام كل منها.
وسنتعلم كيفية تنفيذ هذه العمليات وعرض نتائجها بصورة منظمة في أثناء كتابة الكود.
في هذه الحلقة سنبدأ التعرف على العمليات الحسابية الأساسية التي يمكن تنفيذها على المتغيرات داخل Dart.
وسأوضح لك كيفية التعامل مع عمليات مثل الجمع والطرح والضرب والقسمة، وكيفية تخزين النتائج واستخدامها داخل البرنامج.
وسنتعرف إلى بعض الملاحظات المهمة المتعلقة بأنواع البيانات عند إجراء العمليات الحسابية، والفرق بين القسمة العادية والقسمة الصحيحة، حتى تتمكن من اختيار الأسلوب المناسب حسب طبيعة البيانات التي تتعامل معها.
في هذه الحلقة سنتعرف إلى مجموعة من الاختصارات التي تساعدنا على كتابة الكود بصورة أبسط وأكثر تنظيمًا عند التعامل مع المتغيرات.
وسأوضح لك كيفية تنفيذ العمليات الشائعة بطريقة مختصرة بدلًا من تكرار التعليمات نفسها في كل مرة.
كما سنتعرف إلى أسلوب زيادة القيم وتقليلها، والفرق بين بعض الصيغ المتشابهة التي قد تعطي نتائج مختلفة في أثناء التنفيذ. فهم
هذه الاختصارات سيجعل قراءة الكود وكتابته أسهل مع تقدِّمك في تعلم Dart.
في هذه الحلقة سنتعرف إلى عمليات المقارنة في Dart، وهي من الأدوات الأساسية التي تساعدنا على التحقق من القيم واتخاذ القرارات داخل البرامج.
وسأوضح لك أشهر علامات المقارنة وكيفية استخدامها لمعرفة العلاقة بين القيم المختلفة.
وسنتعرف إلى نوع النتائج التي تعيدها هذه العمليات، ودورها في بناء الشروط والتحقق من صحة البيانات قبل تنفيذ الأوامر المختلفة داخل التطبيق.
في هذه الحلقة سنتعرف على العمليات المنطقية التي تتيح لنا التعامل مع أكثر من شرط في الوقت نفسه داخل البرنامج.
وسأوضح لك الفرق بين الحالات التي تتطلب تحقق جميع الشروط، والحالات التي يكفي فيها تحقق شرط واحد فقط، وكيف يمكن استخدام هذه العمليات للتحقق من صحة البيانات واتخاذ القرارات بطريقة أكثر دقة.
ويُعد فهم هذه المفاهيم خطوة أساسية قبل الانتقال إلى بناء الشروط والمنطق البرمجي في التطبيقات.
في هذه الحلقة سنتعمق أكثر في التعامل مع النصوص باستخدام String، وسنتعرف إلى مجموعة من الدوال والخصائص التي تساعدنا على قراءة النصوص ومعالجتها بطرق مختلفة.
وسأوضح لك كيفية استخراج معلومات من النص، والبحث داخله، والتعامل مع أجزائه المختلفة، إضافة إلى تنفيذ بعض العمليات الشائعة التي ستحتاج إليها كثيرًا في أثناء تطوير التطبيقات والتعامل مع بيانات المستخدمين.
في هذه الحلقة سنبدأ أول تطبيق عملي يجمع بين المفاهيم التي تعلمناها حتى الآن. سأوضح لك طريقة التفكير الصحيحة في حل المشكلات البرمجية، بدايةً من تحديد المعطيات المطلوبة، مرورًا بكتابة المنطق الملائم للحل، وصولًا إلى استخراج النتيجة وعرضها للمستخدم عرضًا واضحًا.
وبهذا المثال ستتعرف على كيفية توظيف المتغيرات والعمليات الحسابية معًا لبناء حل برمجي متكامل.
في هذه الحلقة أريدك أن تعتمد على نفسك في تطبيق ما تعلمته حتى الآن من مفاهيم وأساسيات.
سنعمل على مسألة عملية تتطلب استخدام المتغيرات والعمليات الحسابية للوصول إلى النتيجة المطلوبة، مع التركيز على تحليل المشكلة وتحويلها إلى خطوات برمجية واضحة.
وستتدرب على عرض النتائج بصورة ملائمة والتعامل مع القيم العشرية في أثناء تنفيذ الحل.
في هذه الحلقة سنتعرف إلى واحدة من أهم الأدوات التي تمنح البرامج القدرة على اتخاذ القرارات والتعامل مع الحالات المختلفة.
وسأشرح لك كيفية تنفيذ أو تجاهل أجزاء من الكود بناءً على شروط معينة، ومتى نستخدم كل أسلوب من أساليب التحكم الشرطي حسب طبيعة المشكلة التي نريد حلها.
كما سنتعرف إلى بعض الطرق المختصرة التي تساعد على كتابة الشروط بصورة أكثر تنظيمًا ووضوحًا.
في هذه الحلقة سنطبِّق عمليًّا ما تعلمناه عن التحكم في سير البرنامج واتخاذ القرارات داخل التطبيقات.
وسأوضح لك متى يكون استخدام switch هو الخيار الأفضل؟
وكيف يمكن الاستفادة منه لتنظيم التعامل مع مجموعة من الحالات الثابتة بطريقة واضحة وسهلة القراءة؟
وسنتعرف إلى بعض العناصر المهمة التي تساعد على بناء منطق أكثر تنظيمًا عند التعامل مع القيم والاختيارات المختلفة داخل البرنامج.
في هذه الحلقة سنطبِّق عمليًّا ما تعلمناه عن الجمل الشرطية بواسطة حل تمرين سهل يعتمد على المقارنة بين القيم واتخاذ القرار الملائم بناءً على النتيجة.
وسأوضح لك طريقة تحليل المشكلة واختيار الأسلوب الأفضل لكتابتها.
وسنتعرف على الفرق بين أكثر من طريقة لتنفيذ المنطق نفسه، ومتى يكون استخدام كل منها هو الخيار الأفضل.
في هذه الحلقة سنواجه تحديًا عمليًا يجمع بين عدد من المفاهيم التي تعلمناها سابقًا.
وسنركز على اختيار الأداة الملائمة لحل المشكلة وليس الوصول إلى نتيجة صحيحة فحسب.
وسأوضح لك كيفية التعامل مع حالات عدة مختلفة داخل البرنامج، وطريقة تنظيم الكود بصورة أكثر وضوحًا، إضافة إلى أهمية التفكير في الأخطاء المحتملة والتعامل معها قبل أن تؤثر في عمل التطبيق.
في هذه الحلقة سننتقل من التعامل مع قيمة واحدة إلى التعامل مع مجموعة من القيم داخل متغير واحد.
وسأشرح لك مفهوم الـList ولماذا تُعد من أهم هياكل البيانات التي ستستخدمها باستمرار في أثناء البرمجة.
وسنتعرف إلى طريقة إنشاء القوائم والتعامل مع عناصرها، وكيفية الوصول إلى البيانات وتعديلها وتنظيمها بطريقة أكثر مرونة وكفاءة.
في هذه الحلقة سنتعرف إلى أهم العمليات التي سنستخدمها يوميًا عند التعامل مع الـ List.
وسأوضح لك كيفية إضافة عناصر جديدة، وحذف العناصر الموجودة، والتعديل على البيانات المخزنة داخل القائمة، إضافة إلى بعض الأدوات التي تساعدنا على معرفة حالة القائمة وعدد العناصر الموجودة بداخلها.
هذه المهارات تُعد أساسية عند التعامل مع البيانات المتغيرة في التطبيقات الحقيقية.
في هذه الحلقة سنتعرف إلى مفهوم CRUD، وهو مجموعة العمليات الأساسية التي تُستخدم للتعامل مع البيانات في معظم التطبيقات.
وسأوضح لك كيف ترتبط هذه العمليات بما تعلمناه سابقًا عن الـ List، وكيف يمكن إضافة البيانات وقراءتها وتعديلها بطريقة منظمة.
وسنتعرف إلى بعض الأساليب التي تمنحنا مرونة أكبر في أثناء التعامل مع العناصر داخل القوائم وتحديثها حسب الحاجة.
في هذه الحلقة سنتعرف إلى الطرق المختلفة لحذف العناصر من الـ List حسب طبيعة الموقف الذي نتعامل معه.
وسأوضح لك متى يكون الحذف بناءً على القيمة هو الخيار الملائم؟ ومتى نلجأ إلى الحذف باستخدام الـ Index أو وفق شروط محددة؟
وسنتعرف إلى بعض الملاحظات المهمة التي تساعد على تجنب الأخطاء في أثناء التعامل مع عناصر القوائم وتعديلها.
في هذه الحلقة سنتعرف إلى بعض الأدوات المفيدة التي تجعل التعامل مع الـ List أكثر مرونة وتنظيمًا.
وسأوضح لك كيفية دمج القوائم ونقل عناصرها بطرائق مختلفة، والفرق بين التعامل مع العناصر نفسها والتعامل مع القائمة ككيان واحد.
وسنكتشف أساليب سهلة تساعدنا على التحقق من وجود بيانات داخل القائمة قبل تنفيذ العمليات المختلفة عليها.
في هذه الحلقة سنتعرف على بنية بيانات مهمة تُستخدم كثيرًا عند التعامل مع البيانات المرتبطة ببعضها داخل التطبيقات.
وسأوضح لك الفرق بين الـ List والـ Map، ومتى يكون استخدام كل منهما هو الخيار الأفضل؟
وسنتعلم كيفية تخزين البيانات والوصول إليها وتعديلها وإدارتها باستخدام المفاتيح، ما يجعل التعامل مع المعلومات أكثر وضوحًا وتنظيمًا في المشروعات الحقيقية.
في هذه الحلقة سنتعرف إلى مفهوم الحلقات التكرارية، وهي من الأدوات الأساسية التي تساعدنا على تنفيذ الأوامر المتكررة بطريقة أكثر كفاءة وتنظيمًا.
وسأشرح لك فكرة التكرار وكيفية التحكم في عدد مرات تنفيذ الكود، والعناصر الأساسية التي تعتمد عليها الحلقات التكرارية في أثناء العمل.
كما سنتعرف إلى أشهر أنواع الـ Loops في Dart، ولماذا تُعد من أكثر الأدوات استخدامًا عند التعامل مع البيانات والقوائم داخل التطبيقات؟
في هذه الحلقة سنكتشف الفروق الأساسية بين أشهر أنواع الحلقات التكرارية في Dart، ومتى يكون استخدام كل نوع هو الخيار الأفضل؟
سأوضح لك كيف تعمل هذه الحلقات في أثناء التنفيذ، وما الذي يميز كل واحدة منها عن الأخرى، إضافة إلى بعض الملاحظات المهمة التي تساعدك على تجنب الأخطاء الشائعة عند التعامل مع شروط التكرار وتحديث القيم داخل الحلقات.
في هذه الحلقة سنركز على فهم آلية عمل الـ for loop خطوة خطوة، وكيف تنتقل بين مراحل البداية والشرط والتكرار حتى تصل إلى التوقف؟
وسأشرح لك ما يحدث في أثناء كل دورة من دورات الحلقة، وبعض التفاصيل المهمة التي تساعدك على فهم طريقة التنفيذ فهمًا أعمق، حتى تتمكن من استخدام الـ for loop بثقة في مختلف السيناريوهات البرمجية.
في هذه الحلقة سنكتشف أداتين مهمتين جدًا للتحكم في سلوك الحلقات التكرارية في أثناء التنفيذ.
وسأوضح لك كيف يمكن تجاوز حالات معينة داخل الحلقة دون إيقافها؟ وكيف يمكن إنهاء الحلقة بالكامل عند تحقق شرط محدد؟
وسنتعرف إلى تأثير ترتيب الأوامر داخل الحلقة، ومتى يكون استخدام كل من break و continue هو الخيار الملائم.
في هذه الحلقة سنتعلم كيفية التعامل مع عناصر الـ List عمليًّا باستخدام الحلقات التكرارية.
وسأوضح لك كيف يمكن المرور على جميع العناصر دون الحاجة إلى الوصول لكل عنصر يدويًا.
كما سنتعلم أكثر من أسلوب للتعامل مع القوائم، والفرق بين الحالات التي نحتاج فيها إلى معرفة موقع العنصر، والحالات التي يكفي فيها التعامل مع العنصر نفسه فقط.
هذه المهارة تُعد من أكثر الأمور استخدامًا عند العمل مع البيانات داخل التطبيقات.
في هذه الحلقة سنتعلم أسلوبًا آخر للتعامل مع عناصر الـ List بطريقة مختصرة ومنظمة.
وسأوضح لك كيف يمكن تنفيذ أوامر معينة على جميع عناصر القائمة دون الحاجة إلى كتابة حلقة تقليدية.
وسنتعرف إلى الحالات التي يُفضّل فيها استخدام forEach، والفرق بينها وبين الأساليب الأخرى التي تعلمناها سابقًا للتكرار على عناصر القوائم.
في هذه الحلقة سنطبِّق مفهوم الحلقات التكرارية بطريقة مختلفة بتنفيذ العد التنازلي بدلًا من العد التصاعدي.
وسأوضح لك كيف يمكن تعديل بداية الحلقة وشرطها وخطوة التكرار لتعمل في الاتجاه العكسي، حتى تتمكن من التحكم في سير التكرار بالأسلوب الملائم حسب متطلبات المشكلة التي تعمل عليها.
في هذه الحلقة سنستخدم الـ While Loop لحل مسألة عملية تعتمد على التكرار وتجميع النتائج خطوة خطوة.
وسأوضح لك كيفية الاستفادة من الحلقات التكرارية في تنفيذ العمليات الحسابية المتتابعة، وطريقة تتبع القيم في أثناء التنفيذ للوصول إلى النتيجة النهائية.
وستتدرب على تحليل المشكلة وتحويلها إلى خطوات برمجية يمكنك تطبيقها بنفسك على أمثلة مشابهة.
في هذه الحلقة سنطبِّق ما تعلمناه عن الحلقات التكرارية والشروط لحل مسألة عملية تعتمد على التمييز بين الأعداد الزوجية والفردية.
وسأوضح لك أكثر من طريقة للوصول إلى النتيجة نفسها، وكيف يمكن اختيار الأسلوب الأفضل لتقليل عدد العمليات وتحسين طريقة التفكير في أثناء كتابة الحلول البرمجية.
في هذه الحلقة سنطبِّق أكثر من مفهوم تعلمناه سابقًا في مثال عملي يجمع بين القوائم والحلقات التكرارية.
وسأوضح لك كيفية إنشاء مجموعة من القيم تلقائيًّا وإضافتها إلى الـ List دون تكرار الكود يدويًا.
وسنتعلم استخدام الأرقام العشوائية في Dart، وكيف يمكن الاستفادة منها في بناء تطبيقات وسيناريوهات عملية مختلفة؟
في هذه الحلقة سنتعلم أحد المفاهيم المهمة في Dart، وهو التعامل مع القيم الفارغة وآلية Null Safety.
وسأوضح لك الفرق بين المتغيرات التي يجب أن تحتوي قيمة دائمًا، والمتغيرات التي يمكن أن تكون فارغة عند الحاجة، ومتى يكون استخدام كل نوع هو الخيار الأفضل.
وسنتعلم أيضًا بعض المصطلحات الأساسية المرتبطة بتعريف المتغيرات وإسناد القيم إليها في أثناء كتابة الكود.
في هذه الحلقة سنتعرف إلى الدوال (Functions) وأهميتها في تنظيم الكود وتقليل التكرار في أثناء البرمجة.
وسأوضح لك كيف يمكن تجميع مجموعة من الأوامر داخل وحدة قابلة لإعادة الاستخدام، وكيفية استدعائها عند الحاجة بدلًا من إعادة كتابة الكود في كل مرة.
وسنتعلم فكرة تمرير البيانات إلى الدوال، والفرق بين المعاملات والقيم المرسلة، حتى تتمكن من بناء دوال أكثر مرونة وقابلية لإعادة الاستخدام.
في هذه الحلقة سنتعلم نوعًا مهمًّا من الـ Functions، وهو الدوال التي تُرجع قيمة يمكن استخدامها في أجزاء مختلفة من البرنامج.
وسأوضح لك الفرق بين الدوال التي تنفذ مهمة مباشرة والدوال التي تعيد نتيجة للاستفادة منها لاحقًا، وكيفية استخدام return الاستخدام الصحيح.
إضافة إلى أهمية اختيار نوع البيانات الملائم والقيمة التي تعيدها الدالة في أثناء التنفيذ.
في هذه الحلقة سنتعلم الطرائق المختلفة التي تستقبل بها الدوال البيانات، والفرق بين القيم التي نعرِّفها داخل الدالة والقيم التي نرسلها عند استخدامها.
وسأوضح لك متى نعتمد على ترتيب القيم؟ ومتى يكون استخدام الأسماء أكثر وضوحًا؟ وكيف يمكن جعل بعض البيانات اختيارية لتسهيل استخدام الدوال وكتابة كود أكثر مرونة وتنظيمًا؟
في هذه الحلقة سنتعلم أسلوبًا مختصرًا لكتابة الدوال في Dart يُستخدم كثيرًا عند التعامل مع العمليات السهلة.
وسأوضح لك متى يكون هذا الأسلوب ملائمًا؟ وما الفرق بينه وبين النمط التقليدي للدوال؟
وكيف يمكن أن يساعد على جعل الكود أكثر اختصارًا وسهولة في القراءة دون تغيير طريقة عمل البرنامج؟
في هذه الحلقة سننتقل إلى مرحلة جديدة في تعلم البرمجة، ونتعرف على أسلوب مختلف لتنظيم التطبيقات الكبيرة وإدارة مكوناتها بطريقة أكثر احترافية.
وسأشرح لك الفكرة العامة للبرمجة الكائنية ولماذا ظهرت، وكيف تساعد على تقسيم البرامج إلى أجزاء منظمة يسهل تطويرها وصيانتها مع زيادة حجم المشروع.
وسنمهد للمفاهيم الأساسية التي سنبني عليها بقية رحلتنا في OOP خلال الحلقات القادمة.
في هذه الحلقة سأوضح لك المشكلة التي جاءت البرمجة الكائنية لحلها، ولماذا تصبح الطرائق التقليدية أقل كفاءة كلما كبر حجم المشروع؟
سنتعرف إلى التحديات التي تظهر عند إدارة كميات كبيرة من البيانات والوظائف داخل التطبيقات، وكيف يساعد أسلوب OOP على تنظيم الكود وتقليل التكرار وربط البيانات بالسلوك الخاص بها بطريقة أكثر وضوحًا وقابلية للتطوير؟
في هذه الحلقة سننتقل من الجانب النظري إلى التطبيق العملي لمفاهيم البرمجة الكائنية.
وسأوضح لك الفرق بين الـ Class والـ Object، وكيف يمكن استخدام الـ Class كقالب لإنشاء كائنات متعددة تمتلك بيانات ووظائف خاصة بها؟
وسنتعلم كيفية تجميع الخصائص والسلوكيات داخل مكان واحد، ولماذا يساعد هذا الأسلوب على تنظيم الكود وتقليل التكرار عند بناء التطبيقات الكبيرة.
في هذه الحلقة سنتعرف على أحد أهم مكونات الـ Class، وهو الـ Constructor، ودوره في تجهيز الـ Object منذ لحظة إنشائه.
وسأوضح لك كيف يمكن تمرير البيانات مباشرة في أثناء إنشاء الكائنات، ولماذا يُستخدم الـ Constructor بكثرة في البرمجة الكائنية؟
وسنتعرف إلى كلمة this وفائدتها في التعامل مع خصائص الـ Object وربط البيانات المستقبلة بالقيم الخاصة بكل نسخة يتم إنشاؤها.
في هذه الحلقة سنتعلم أسلوبًا مهمًّا يتيح لنا إنشاء الـ Objects بأكثر من طريقة داخل الكلاس نفسه.
وسأوضح لك متى نحتاج إلى Named Constructors؟ وكيف تساعدنا على التعامل مع البيانات القادمة من مصادر مختلفة مثل الـ Map أو الـ JSON بطريقة أكثر تنظيمًا؟
وسنتعلم أشهر الاستخدامات العملية لهذا الأسلوب، ولماذا يُستخدم بكثرة في مشروعات Dart وFlutter الحديثة؟
في هذه الحلقة سنتعرف إلى الـ Initializer List، وهي من الأدوات المهمة التي تساعد على تهيئة البيانات في أثناء إنشاء الـ Objects بطريقة أكثر تنظيمًا.
وسأوضح لك متى يمكن تنفيذها مقارنة بالـ Constructor؟ وكيف يمكن استخدامها لإسناد القيم وتجهيز الخصائص قبل بدء تنفيذ الكود الرئيسي؟
وسنتعلم بعض الاستخدامات العملية التي تجعل الكود أوضح وأسهل في الصيانة داخل مشروعات Dart وFlutter.
في هذه الحلقة سنتعرف إلى مفهوم Static وأهميته داخل البرمجة الكائنية، ومتى يكون من الأفضل ربط البيانات أو الدوال بالـ Class نفسه بدلًا من ربطها بكل Object على حدة؟
وسأوضح لك الحالات التي يُستخدم فيها Static لتقليل التكرار وتنظيم الكود، وكيفية الوصول إلى هذه العناصر مباشرة دون الحاجة إلى إنشاء كائنات جديدة.
في هذه الحلقة سنتعلم طريقتين مهمتين للتعامل مع القيم الثابتة في Dart، ومتى نستخدم كلًا منهما داخل مشروعاتنا؟
وسأوضح لك الفرق بين const وfinal، وكيف يؤثر توقيت تحديد القيمة في اختيار الأداة الملائمة، حتى تتمكن من كتابة كود أكثر وضوحًا وحماية البيانات التي لا يجب تغييرها في أثناء تشغيل البرنامج.
في هذه الحلقة سنتعلم أول مبادئ البرمجة الكائنية الأساسية، وهو Encapsulation أو التغليف.
وسأوضح لك كيف يساعد هذا المفهوم على حماية البيانات ومنع التعديل عليها بطرق غير صحيحة، وكيف يمكن التحكم في آلية الوصول إلى القيم والتحقق منها قبل استخدامها.
وسنتعرف إلى أهمية تجميع البيانات المرتبطة ببعضها داخل كيان واحد منظم، ما يجعل الكود أكثر أمانًا وأسهل في الإدارة والتطوير.
في هذه الحلقة سنتعلم مبدأ Inheritance أو الوراثة، وهو أحد أهم مفاهيم البرمجة الكائنية وأكثرها استخدامًا في المشروعات الحقيقية.
وسأوضح لك كيف يمكن تجميع الخصائص المشتركة بين عدة كائنات داخل كيان واحد، ثم إعادة استخدامها دون تكرار، ما يجعل الكود أكثر تنظيمًا وأسهل في التطوير والصيانة.
كما سنتعرف إلى الحالات التي يكون فيها استخدام الوراثة ملائمًا، وكيف تساعد على بناء علاقات منطقية بين مكونات البرنامج المختلفة.
في هذه الحلقة سنتعرف إلى Method Overriding، وهي من أهم المفاهيم المرتبطة بالوراثة في البرمجة الكائنية.
وسأوضح لك كيف يمكن للكلاسات الموروثة أن تعيد تنفيذ الدوال الموجودة في الكلاس الأب بما يلائم احتياجاتها الخاصة، مع الاحتفاظ بإمكانية الاستفادة من السلوك الأصلي عند الحاجة.
وسنكتشف الحالات التي نستخدم فيها إعادة التعريف، وكيف تساعد على بناء كود أكثر مرونة وتنظيمًا عند التعامل مع أنواع مختلفة من الكائنات؟
في هذه الحلقة سنتعرف إلى مفهوم Abstraction أو التجريد، ولماذا يُعد أحد أهم مبادئ البرمجة الكائنية.
وسأوضح لك كيف يساعد على تنظيم الكود وتقليل التكرار، وكيف يمكن فرض مجموعة من القواعد والوظائف المشتركة على الكلاسات المختلفة دون الحاجة إلى إعادة تعريفها في كل مرة؟
وسنكتشف دور الـ Abstract Class في بناء أنظمة أكثر وضوحًا وتنظيمًا، وكيف يضمن التزام الكلاسات الموروثة بتنفيذ الوظائف الأساسية المطلوبة؟
في هذه الحلقة سنتعلم آخر المبادئ الأساسية في البرمجة الكائنية، وهو Polymorphism أو تعدد الأشكال.
وسأوضح لك كيف يمكن التعامل مع كائنات مختلفة من طريق واجهة أو نوع أساس واحد، مع احتفاظ كل كائن بسلوكه الخاص.
وسنكتشف الفوائد العملية لهذا المفهوم، وكيف يساعد على بناء تطبيقات أكثر مرونة وقابلية للتوسعة، ويقلل الحاجة إلى الشروط المتكررة عند إضافة أنواع جديدة أو تطوير النظام مستقبلًا؟
في هذه الحلقة سنتعلم الـ Interface، وهي طريقة أخرى لتطبيق مفهوم الـ Abstraction.
وتعتمد الـ Interface على فكرة العقد (Contract)، لأنها تُجبر أي Class يطبقها باستخدام implements على تنفيذ جميع الدوال الموجودة بداخلها.
والفرق الأساسي بينها وبين الـ Abstract Class هو أن الـ Abstract Class يمكن أن يحتوي Implementations محضرة يمكن إعادة استخدامها، في حين تُلزم الـ Interface جميع الـ Classes بتنفيذ الدوال بنفسها.
باختصار، إذا كنت تريد فرض مجموعة من السلوكيات على عدة Classes فاستخدم Interface، أما إذا كنت تريد توفير سلوك مشترك يمكن إعادة استخدامه فغالبًا ستستخدم Abstract Class.
في هذه الحلقة سنتعلم Mixin في Dart، ولماذا نحتاج إليه عند التعامل مع الوظائف المشتركة بين عدة Classes.
وسنفهم مشكلة الوراثة المتعددة التي لا تدعمها Dart دعمًا مباشرًا، وكيف يسمح لنا Mixin بإضافة سلوكيات وخصائص مشتركة إلى أكثر من Class دون تكرار الكود؟
وسنكتشف دوره في تطبيق مبدأ DRY وإعادة استخدام الوظائف المشتركة بطريقة منظمة وسهلة الصيانة.
في هذه الحلقة سنتعرف إلى Enum في Dart، ومتى يكون استخدامه أفضل من الاعتماد على النصوص والقيم العادية؟
وسنرى كيف يساعدنا Enum على تجميع القيم الثابتة داخل نوع واحد منظم وآمن؟ وكيف يمنع الأخطاء الناتجة عن استخدام قيم غير صحيحة؟
وسنتعلم طريقة دمجه مع Switch Case للاستفادة من فحص جميع الحالات الممكنة وجعل الكود أكثر وضوحًا وسهولة في الصيانة.
في هذه الحلقة سنتعلم Extensions في Dart، وهي ميزة تسمح لنا بإضافة Methods وخصائص جديدة إلى Classes موجودة مسبقًا دون الحاجة إلى تعديل الكود الأصلي الخاص بها.
وسنرى كيف يمكن توسيع إمكانات الأنواع الجاهزة مثل String، أو حتى Classes التي أنشأناها داخل المشروع، مع الحفاظ على تنظيم الكود وسهولة صيانته.
وسنتعلم استخدام الكلمة this داخل الـ Extension للوصول إلى الكائن الحالي، وكيف تساعد Extensions على إعادة استخدام الوظائف وجعل الكود أكثر وضوحًا ومرونة.
Reply to Comment