{"id":"l-js-5-5","courseId":"javascript-fundamentals","lang":"ar","kind":"wrapup","summary":"تراجع ما صار بإمكانك بناؤه بـ JavaScript، وتختار خطوة تالية معقولة بين TypeScript وإطار عمل والاختبارات وإمكانية الوصول، وتخطّط لتدرّب يُبقي مهاراتك في نموّ.","html":"<p>تذكّر الدرس الأول، حين كان <code dir=\"ltr\">console.log(450 + 1200)</code> برنامجًا كاملًا. منذ ذلك الحين بنيت Pocket: تطبيقًا يتحقّق من المدخلات، ويحتفظ ببياناته في كائن state واحد، ويعرض قائمة مصفّاة مع مجاميعها، ويتعامل مع النقرات عبر مستمع مفوَّض واحد، ويحفظ في التخزين، ومنظّمًا في وحدات لكل منها مهمة واضحة. وتعرف أيضًا <em>لماذا</em> تعمل كل قطعة، من حقيقة ما تفعله <code dir=\"ltr\">=</code> إلى الترتيب الذي تنفّذ به حلقة الأحداث الـ callbacks.</p>\n<p>هذا الأساس لا تنتهي صلاحيته. أطر العمل تأتي وتذهب؛ أما المتغيّرات والدوال والمصفوفات والكائنات والـ DOM والأحداث والـ promises فهي المادة التي صُنعت منها كلها.</p>\n<h2 id=\"sec-1\" tabindex=\"-1\">واصل البناء</h2>\n<p>الخطوة التالية الأكثر فاعلية على الإطلاق هي أن تبني أشياء لم يخبرك أحد كيف تبنيها. بعض الأفكار، مرتّبة بشكل عام من الأسهل إلى الأصعب:</p>\n<ul>\n<li><strong>وسّع Pocket</strong>: أضف تاريخًا لكل مصروف وعرضًا لـ “هذا الشهر”؛ وحدّد ميزانية لكل فئة ونبّه حين تقترب منها؛ واسمح للمستخدمين بتعديل مصروف؛ وصدّر البيانات ملفَّ CSV.</li>\n<li><strong>متتبّع عادات</strong>: علّم العادات التي أنجزتها كل يوم واعرض سلاسل الأيام المتتالية. يستخدم التواريخ والتخزين والعرض، ولا شيء أكثر.</li>\n<li><strong>تطبيق مسابقات</strong> (quiz) يحمّل الأسئلة من ملف JSON باستخدام <code dir=\"ltr\">fetch</code> ويحسب النتيجة.</li>\n<li><strong>أعِد بناء موقع صغير تستخدمه</strong>: قائمة مهام، أو محوّل وحدات، أو مؤقّت بومودورو.</li>\n</ul>\n<p>توقّع أن تتعثّر. التعثّر، ثم البحث في MDN، ثم تصحيح طريقك للخروج، هو المهارة الحقيقية، ولا تنمو إلا بممارستها.</p>\n<h2 id=\"sec-2\" tabindex=\"-1\">إلى أين من هنا</h2>\n<p>كل مما يلي يُبنى مباشرة على ما تعرفه الآن، وكل منه يحلّ مشكلة شعرت بها من قبل:</p>\n<ul>\n<li><strong>TypeScript</strong> تضيف الأنواع إلى JavaScript، فيصبح وصول نص حيث يتوقّع Pocket عددًا من السنتات خطأً في محرّرك بدلًا من خلل في بيئة الإنتاج. وحين ترتاح معها، تأخذك <a href=\"/ar/courses/advanced-typescript\">أنماط TypeScript المتقدّمة</a> إلى أبعد من ذلك بكثير.</li>\n<li><strong>إطار عمل للواجهات</strong> مثل React يأخذ نمط “state، ثم update، ثم render” من الدرس السابق ويجعله يتّسع للتطبيقات الكبيرة. ودورة <a href=\"/ar/courses/react-fundamentals\">أساسيات React</a> تفترض بالضبط JavaScript التي تعلّمتها للتوّ.</li>\n<li><strong>الاختبارات</strong>: دوالك النقية في <code dir=\"ltr\">expenses.js</code> مثالية للاختبارات الآلية التي تُثبت أنها تعمل وتظل تعمل. ودورة <a href=\"/ar/courses/testing-javascript\">اختبار تطبيقات JavaScript</a> تبدأ من هناك.</li>\n<li><strong>إمكانية الوصول</strong> (accessibility): استخدمت التسميات و<code dir=\"ltr\">aria-invalid</code> والأزرار الحقيقية؛ ودورة <a href=\"/ar/courses/web-accessibility\">إمكانية الوصول على الويب عمليًا</a> تجعلها عادة في كل واجهة تبنيها.</li>\n<li><strong>Git</strong>: ابدأ من الآن بحفظ مشاريعك باستخدام <a href=\"/ar/courses/git-github\">Git وGitHub</a>، كي يكون لديك سجلّ لتقدّمك ومعرض أعمال تعرضه.</li>\n</ul>\n<h2 id=\"sec-3\" tabindex=\"-1\">عادات تستحق الاحتفاظ بها</h2>\n<p>أبقِ MDN مفتوحًا وأنت تكتب الكود؛ فهو المرجع الذي يستخدمه المطوّرون المحترفون يوميًا. اقرأ كل رسالة خطأ حتى نهايتها قبل أن تبحث عنها. وحين يتصرّف شيء بغرابة، افحص القيم الحقيقية بالطباعة أو بنقطة توقّف قبل أن تغيّر الكود. واكتب دوال صغيرة بأسماء واضحة: فأنت في المستقبل أكثر من سيقرأ كودك على الأرجح.</p>\n","toc":[{"id":"sec-1","text":"واصل البناء","level":2},{"id":"sec-2","text":"إلى أين من هنا","level":2},{"id":"sec-3","text":"عادات تستحق الاحتفاظ بها","level":2}],"takeaways":["صار بإمكانك كتابة برامج تمثّل البيانات، وتتخذ القرارات، وتحوّل القوائم، وتحدّث الصفحة، وتتعامل مع المدخلات، وتحفظ البيانات، وتتحدّث إلى الخوادم.","أسرع طريقة للنموّ من هنا هي بناء مشاريعك الصغيرة الخاصة من أولها إلى آخرها، أكثر من القراءة عن الأدوات الجديدة.","TypeScript، وإطار عمل مثل React، والاختبارات، وإمكانية الوصول، كلها تُبنى مباشرة على ما علّمته هذه الدورة، وكل منها يحلّ مشكلة صرت تعرفها.","MDN هو المرجع الذي يجب أن يبقى مفتوحًا أمامك؛ اقرأ رسائل الأخطاء كاملة وصحّح الأخطاء بالأدلة قبل البحث عن إجابات."],"further":[{"title":"JavaScript Guide (MDN)","url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide"},{"title":"TypeScript for JavaScript Programmers","url":"https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html"},{"title":"Quick Start (react.dev)","url":"https://react.dev/learn"}],"quiz":[{"q":"<p>أنهيت Pocket وتريد أن تتحسّن بأسرع ما يمكن. أيّ خطة هي الأفضل؟</p>","options":[{"text":"اقرأ ثلاثة شروحات أخرى قبل أن تكتب أي كود إضافي.","why":"القراءة تساعد، لكن المهارات تأتي من حلّ مشاكل لم ترها من قبل. والشروحات وحدها تُشعرك بالإنجاز لكنها لا تثبت جيدًا."},{"text":"تعلّم ثلاثة أطر عمل دفعة واحدة لترى أيّها الأفضل.","why":"أطر العمل تتشارك أسس JavaScript نفسها. وتعلّم واحد منها جيدًا يعلّمك أكثر من المرور السريع على ثلاثة."},{"text":"احفظ كل دوال المصفوفات قبل أن تنتقل إلى غيرها.","why":"معرفة وجود الدالة والبحث عن تفاصيلها في MDN هي طريقة عمل المحترفين. والحفظ ليس عنق الزجاجة."},{"text":"أضف إلى Pocket ميزة لم ترَ أحدًا يبنيها، مثل الميزانيات الشهرية، ثم ابنِ تطبيقًا صغيرًا ثانيًا من الصفر.","why":"صحيح. بناء شيء دون دليل خطوة بخطوة يجبرك على التصميم وتصحيح الأخطاء والبحث، وهذه هي المهارة الحقيقية."}],"answer":3},{"q":"<p>يتعطّل Pocket مرارًا حين تستلم دالة مصروفًا قيمة <code dir=\"ltr\">amount</code> فيه نص. أيّ موضوع تالٍ يعالج هذا بأكثر شكل مباشر؟</p>","options":[{"text":"TypeScript، التي تفحص أشكال بياناتك وأنواعها قبل تشغيل الكود.","why":"صحيح. مع الأنواع، يصبح تمرير نص حيث يُتوقّع رقم خطأً في محرّرك، لا خللًا في بيئة الإنتاج."},{"text":"حركات CSS.","why":"الحركات تغيّر شكل الأشياء وتحرّكها. ولا تفعل شيئًا بخصوص نوع البيانات التي تستلمها دوالك."},{"text":"سمة ألوان مختلفة لمحرّر الكود.","why":"سمة المحرّر تغيّر الألوان، لا صحة برنامجك."}],"answer":0},{"q":"<p>أيّ عادة من هذه الدورة هي الأهم حين تصادف خطأً برمجيًا في مشروع جديد؟</p>","options":[{"text":"انسخ أول إجابة تجدها على الإنترنت، ثم امضِ قدمًا.","why":"الإصلاحات المنسوخة دون فهم كثيرًا ما تحلّ مشكلة أخرى وتُنتج خطأً جديدًا."},{"text":"اقرأ الخطأ وأثر المكدّس كاملين، ثم افحص القيم الحقيقية عند السطر الذي يفشل.","why":"صحيح. الرسالة والسطر والقيم الفعلية تشير عادةً مباشرة إلى السبب."},{"text":"أعِد كتابة الميزة كلها من الصفر.","why":"إعادة الكتابة ترمي كودًا يعمل، وكثيرًا ما تُعيد الخطأ نفسه. جد السبب أولًا."}],"answer":1}],"exercise":null,"words":404,"readMinutes":3}