أربع أدوات هي عصب أغلب أسئلة الامتحان: تتّخذ قرارًا بـ if، تكرّر عملية بـ for، تُغلّف الكود في function، وتخزّن مجموعة قيم في array. كل قسم فيه الشرح، مثالين متدرّجين، ومحرر حقيقي تقدر تعدّل فيه الكود وتشغّله بنفسك.
تُستخدم لاتّخاذ قرار بناءً على شرط منطقي نتيجته true أو false. لو الشرط صحّ يتنفّذ الكود اللي جواه، ولو غلط ينتقل لـ else if التانية أو لـ else الأخيرة.
عندنا رقم واحد، وعايزين نعرف نوعه بثلاث حالات — عدد الشروط دايمًا = عدد الحالات ناقص واحد (لأن else بتغطّي الحالة الأخيرة تلقائيًا).
number > 0 → موجبnumber < 0 → سالبنفس الفكرة لكن بأربع حالات متسلسلة. لاحظ إن الترتيب مهم: لازم نبدأ بأعلى قيمة وننزل، لأن أول شرط يتحقق هو اللي يوقف التنفيذ.
ممكن نكتب if كاملة داخل if أخرى — وده اسمه التداخل (nested if). الشرط الداخلي مش بيتفحص أصلًا إلا لو الشرط الخارجي تحقق الأول.
age >= 18 غلط → نطبع "العمر غير مناسب" ومنوصلش للداخلي خالصhasIdelse بتتبع أقرب if ليها في نفس المستوى — تابع الأقواس { }جرّب تغيّر age لـ 15 أو hasId لـ false وشوف أنهي فرع بيتنفّذ.
= للتخزين، أما == و=== فللمقارنة. الفرق: == يقارن القيمة فقط، بينما === يقارن القيمة والنوع معًا — استخدم === دائمًا لتفادي أخطاء المقارنة في الامتحان.
تُستخدم لتكرار تنفيذ كود عدد معروف من المرات، بدل كتابة نفس السطر يدويًا. تتكوّن من ثلاثة أجزاء مفصولة بفاصلة منقوطة: البداية، الشرط، والخطوة.
المتغيّر i يبدأ من 1، ويتكرر الكود طالما i <= 5، وبعد كل تكرار يزيد i بواحد عبر i++.
هنا الحلقة بتمشي على عناصر مصفوفة marks بدل أرقام ثابتة، وبنجمّع كل عنصر في متغيّر total خارج الحلقة.
marks.length = عدد عناصر المصفوفة (هنا 5)length - 1ممكن نحط حلقة for كاملة داخل حلقة أخرى — وده اسمه التداخل (nested for). القاعدة الذهبية: في كل لفّة واحدة من الحلقة الخارجية، الحلقة الداخلية بتخلّص كل لفّاتها من الأول للآخر.
i للخارجية وj للداخلية)جرّب تزوّد عدد لفّات الداخلية لـ j <= 3 وشوف العدد النهائي هيبقى كام.
أشهر سؤال امتحان على الحلقات المتداخلة: الخارجية بتحدد رقم السطر، والداخلية بتكرر النجمة بعدد رقم السطر (لاحظ إن شرط الداخلية j <= i بيعتمد على عدّاد الخارجية).
أشهر غلطة هي الـ off-by-one: كتابة i <= marks.length بدل i < marks.length، وده بيسبب خطأ "undefined" لأنك بتحاول توصل لعنصر مش موجود.
الدالة كتلة كود لها اسم، تقدر تستدعيها أكتر من مرة بدل تكرار نفس الكود. ممكن تستقبل مدخلات (parameters) وترجّع نتيجة عبر return.
الدالة addNumbers بتستقبل a وb، وبترجّع ناتج جمعهم عن طريق return — من غير return كانت هترجّع undefined.
دالة checkAttendance بتاخد مصفوفة أيام غياب لكل طالب، وبتستخدم for علشان تمرّ على كل طالب، وif علشان تقرر حالته، وترجّع مصفوفة نتائج جديدة بـ push.
return بتوقف تنفيذ الدالة فورًا وترجّع القيمة — أي كود بعدها جوّه نفس الدالة متنفّذش. ومتلخبطش بين console.log (بس بيعرض) وreturn (بترجّع قيمة نقدر نستخدمها).
المصفوفة متغيّر واحد بيخزّن مجموعة قيم مرتّبة، وكل قيمة ليها رقم ترتيب (index) يبدأ من 0 مش من 1.
students[0] هو أول اسم، وstudents[2] هو الاسم الثالث — لأن العدّ بيبدأ من صفر.
push(20) بتضيف 20 في آخر المصفوفة (تكبر المصفوفة بعنصر)، بينما scores[1] = 19 بتستبدل العنصر التاني الموجود من غير ما تغيّر الطول.
لو حاولت توصل لفهرس مش موجود زي students[10] في مصفوفة من 4 عناصر، الناتج undefined مش خطأ — لازم تتأكد إن الفهرس أصغر من length.
هنا الأربعة مع بعض بالظبط زي أسئلة الامتحان: array لتخزين الدرجات، function لتغليف منطق التقييم، for للمرور على كل درجة، وif لاتخاذ قرار ناجح/راسب. جرّب تغيّر الدرجات في السطر الأخير وشغّل تاني.
خطوة بخطوة:
evaluateGrades بتستقبل مصفوفة درجات كاملةresults فاضية بتتجهز لتخزين النتائجfor بتمر على كل درجة بالترتيبif بيحدد "ناجح" أو "راسب" لكل طالبreturn بيرجّع مصفوفة النتائج كاملةHTML مش لغة برمجة، دي لغة توصيف بتحدد هيكل الصفحة عن طريق وسوم (Tags). كل وسم غالبًا ليه بداية ونهاية، وممكن ياخد صفات (attributes) بتديله معلومات إضافية زي الرابط أو مصدر الصورة.
جرّب غيّر النص جوه الوسوم وشغّل تاني عشان تشوف الفرق فورًا في المعاينة.
h1 لأكبر عنوان، والحجم بينزل لحد h6a href="..." بيعمل رابط قابل للضغطimg src="..." alt="..." بيعرض صورة، وalt نص بديل لو الصورة متحمّلتشالقوائم بتنظّم عناصر متتالية، والحاويات بتجمّع أجزاء من الصفحة مع بعض.
ul + li = قائمة بنقاط، ol + li = قائمة مرقّمةdiv عنصر block بياخد عرض السطر بالكاملspan عنصر inline بيتماشى جوه نفس السطرالفرق بين div وspan: div بياخد عرض السطر بالكامل (block)، أما span فبيتماشى جوه نفس السطر مع باقي المحتوى (inline) — استخدم div للحاويات الكبيرة، وspan لتنسيق جزء بسيط من نص.
CSS بتحدد شكل عناصر HTML: الألوان، المقاسات، المسافات، الخطوط... المحدد (selector) بيحدد أنهي عنصر هيتنسق، والخصائص (properties) جوه الأقواس بتحدد الشكل نفسه.
ثلاث طرق لاستهداف العناصر، وكل واحدة ليها "قوة" (specificity) مختلفة في التطبيق.
p بيأثر على كل عناصر النوع ده.class بيأثر بس على العناصر اللي ليها الـclass ده، وممكن يتكرر#id بيأثر على عنصر واحد بس، ولازم يكون فريد في الصفحةكل عنصر في الصفحة عبارة عن صندوق مكوّن من طبقات متداخلة.
padding (مسافة داخلية) ثم border (الحد)margin (مسافة خارجية بين العنصر واللي حواليه)الترتيب من الداخل للخارج دايمًا: content ← padding ← border ← margin. أشهر غلطة في الامتحان هي الخلط بين padding (جوه الحد) وmargin (برّه الحد).
أسئلة اختيار من متعدد بنفس أسلوب الامتحان: اختيارات قريبة من بعضها قصدًا عشان تتأكد إنك فاهم مش بس حافظ. اختار إجابة وهيظهر لك فورًا صح ولا غلط مع السبب.