المكتبة

Chapter 8: Conditionals & Logic - The Brain of Your Code

# الفصل 8: الشروط والمنطق.. عقل الكود {: .story-title .anim-fade-in} ## من الأوامر العمياء إلى القرارات الذكية {: .story-heading .anim-slide-up} في الفصول السابقة، تعلمنا كيف نخزن البيانات في متغيرات. هذا جيد، لكنه يشبه امتلاك سيارة يمكنها السير في خط مستقيم فقط. ماذا لو واجهت تقاطع طرق؟ ماذا لو كانت إشارة المرور حمراء؟ البرنامج الذي لا يستطيع اتخاذ قرار هو مجرد آلة حاسبة غبية. ينفذ الأوامر بالترتيب، واحدًا تلو الآخر، ثم يتوقف. لكن القوة الحقيقية للبرمجة تظهر عندما تمنح الكود الخاص بك القدرة على "التفكير". القدرة على تقييم موقف ما واختيار المسار المناسب. تخيل سيارة ذاتية القيادة تقترب من إشارة مرور. الكود بداخلها لا يقول "سر للأمام". بل يقول شيئًا مثل: "**إذا (IF)** كانت الإشارة خضراء، تقدم. **وإلا (ELSE IF)** إذا كانت صفراء، استعد للتوقف. **وإلا (ELSE)**، توقف فورًا". هذا هو جوهر ما سنتعلمه اليوم. سننتقل من إعطاء أوامر عمياء إلى بناء عقل منطقي للكود الخاص بنا. مرحبًا بك في عالم الشروط والمنطق. {: .story-content .page-1 .page-type-text .anim-fade-in dir="rtl" data-music="tech-beat.mp3"} --- ## 1. مفترق الطرق: `if`, `else if`, `else` {: .story-heading .anim-slide-up} الأداة الأساسية لاتخاذ القرار في أي لغة برمجة هي جملة `if`. إنها بسيطة بشكل مخادع لكنها قوية بشكل لا يصدق. فكر فيها كحارس يقف عند بوابة. يسأل سؤالاً له إجابة "نعم" أو "لا" فقط. إذا كانت الإجابة "نعم"، يفتح البوابة. إذا كانت "لا"، فإنه يوجهك إلى مكان آخر. هيكل الجملة الشرطية يتكون من ثلاثة أجزاء رئيسية: 1. **`if` (إذا):** هذا هو الشرط الأساسي. يتم تقييم التعبير الذي بداخله. إذا كانت نتيجته "صحيحة" (True)، يتم تنفيذ الكتلة البرمجية (Code Block) التي تليه. 2. **`else if` (وإلا إذا):** هذا الجزء اختياري. إذا كان شرط `if` الأول "خاطئًا" (False)، ينتقل البرنامج إلى هنا ويقيم شرطًا جديدًا. يمكنك استخدام العديد من `else if` كما تريد. 3. **`else` (وإلا):** هذا هو الملاذ الأخير. إذا فشلت جميع الشروط السابقة (كل من `if` و `else if`)، يتم تنفيذ الكتلة البرمجية الموجودة داخل `else`. إنه بمثابة الخطة الاحتياطية. لنأخذ مثالاً عمليًا بلغة تشبه جافاسكريبت: ```javascript let userAge = 20; if (userAge >= 18) { console.log("أهلاً بك، يمكنك الدخول."); // سيتم تنفيذ هذا } else { console.log("عذرًا، هذا المحتوى للكبار فقط."); } ``` هنا، الشرط `userAge >= 18` نتيجته "صحيحة"، لذا يتم تنفيذ الكود داخل أول كتلة. لو كان `userAge` يساوي 15، لكانت النتيجة "خاطئة"، وكان البرنامج سيتجاهل الكتلة الأولى وينفذ الكود الموجود داخل `else`. هذه هي الآلية التي تجعل مواقع الويب تعرض لك محتوى مختلفًا بناءً على ما إذا كنت مسجلاً للدخول أم لا، أو كيف تقرر لعبة الفيديو ما إذا كنت قد هزمت الوحش أم لا. إنه مفترق الطرق الرقمي. {: .story-content .page-2 .page-type-text .anim-fade-in dir="rtl"} --- ## 2. رفع مستوى التعقيد: `AND`, `OR`, `NOT` {: .story-heading .anim-slide-up} شرط واحد نادرًا ما يكون كافيًا. العالم الحقيقي معقد، وكذلك البرامج التي تحاكيه. ماذا لو أردت التحقق من شيئين في نفس الوقت؟ هنا يأتي دور المعاملات المنطقية (Logical Operators). إنها الأدوات التي تسمح لك بدمج عدة شروط في تعبير واحد قوي. هناك ثلاثة معاملات أساسية يجب أن تتقنها: 1. **`AND` (و):** في معظم اللغات يُمثل بـ `&&`. يتطلب هذا المعامل أن تكون **جميع** الشروط صحيحة حتى تكون النتيجة النهائية صحيحة. إذا فشل شرط واحد فقط، تفشل النتيجة كلها. * **مثال:** للوصول إلى لوحة تحكم المدير، يجب أن يكون المستخدم مسجلاً للدخول **و** أن يكون لديه دور "مدير". ```javascript if (isLoggedIn && userRole === 'admin') { // أظهر لوحة التحكم } ``` 2. **`OR` (أو):** يُمثل بـ `||`. هذا المعامل أكثر تساهلاً. يكفي أن يكون **شرط واحد فقط** صحيحًا حتى تكون النتيجة النهائية صحيحة. * **مثال:** لتقديم خصم، يمكن أن يكون المستخدم عميلاً جديدًا **أو** لديه كوبون خصم. ```javascript if (isNewCustomer || hasCoupon) { // طبّق الخصم } ``` 3. **`NOT` (ليس):** يُمثل بـ `!`. هذا المعامل بسيط: إنه يعكس القيمة المنطقية. يحول `true` إلى `false` والعكس صحيح. * **مثال:** عرض رسالة "الرجاء تسجيل الدخول" **إذا لم يكن** المستخدم مسجلاً للدخول. ```javascript if (!isLoggedIn) { // أظهر رسالة تسجيل الدخول } ``` إتقان هذه المعاملات الثلاثة هو ما يفصل بين المبتدئ الذي يكتب شروطًا متداخلة وفوضوية (Nested `if`s)، والمطور الذي يكتب منطقًا نظيفًا وواضحًا ومباشرًا. إنها تمنحك القدرة على بناء قواعد عمل معقدة بدقة وسهولة. {: .story-content .page-3 .page-type-text .anim-fade-in dir="rtl"} --- ## 3. فخاخ شائعة ونصائح عملية {: .story-heading .anim-slide-up} كتابة الشروط تبدو سهلة، لكن هناك بعض الفخاخ الكلاسيكية التي يقع فيها كل مبتدئ تقريبًا. معرفتها مسبقًا ستوفر عليك ساعات من تصحيح الأخطاء (Debugging). **الفخ الأول: `=` مقابل `===`** هذا هو أشهر خطأ في تاريخ الأخطاء. * `=` هو معامل الإسناد (Assignment Operator). وظيفته هي وضع قيمة داخل متغير. `let x = 5;` * `==` أو `===` هي معاملات المقارنة (Comparison Operators). وظيفتها هي التحقق مما إذا كانت قيمتان متساويتين. عندما تكتب `if (userRole = 'admin')`، فأنت لا تتحقق من دور المستخدم، بل أنت **تجعل** دوره "admin" بالقوة! هذه العملية غالبًا ما تُرجع قيمة "صحيحة"، مما يؤدي إلى تنفيذ الكود بشكل خاطئ ومنح صلاحيات لا ينبغي منحها. **القاعدة الذهبية:** استخدم دائمًا `===` للمقارنة في لغات مثل جافاسكريبت. إنه يتحقق من القيمة والنوع، وهو أكثر أمانًا. **الفخ الثاني: جحيم الشروط المتداخلة (Nested If Hell)** عندما تبدأ، قد تجد نفسك تكتب شيئًا كهذا: ```javascript if (isLoggedIn) { if (isSubscribed) { if (hasCompletedProfile) { // أخيرًا، افعل شيئًا } } } ``` هذا الكود صعب القراءة والصيانة. الحل؟ استخدم المعاملات المنطقية لتبسيطه: ```javascript if (isLoggedIn && isSubscribed && hasCompletedProfile) { // افعل نفس الشيء، ولكن بشكل أنظف } ``` نصيحة أخرى هي استخدام "الشروط الحارسة" (Guard Clauses). بدلاً من التداخل، تحقق من الشروط السلبية أولاً واخرج مبكرًا. **الفخ الثالث: إهمال حالة `else`** من السهل أن تنسى الحالة الافتراضية. أنت تفكر في "ماذا لو نجح الشرط؟" ولكن ماذا لو فشل؟ عدم وجود كتلة `else` يمكن أن يترك برنامجك في حالة غير متوقعة. حتى لو كانت كتلة `else` فارغة أو تحتوي فقط على سجل خطأ (Error Log)، فإن وجودها يجعل نيتك واضحة ويساعد في اكتشاف المشاكل لاحقًا. {: .story-content .page-4 .page-type-text .anim-fade-in dir="rtl"} --- ## 4. من الأوامر إلى الذكاء {: .story-heading .anim-slide-up} لقد قمنا بتغطية الكثير، لكن الفكرة الأساسية بسيطة: الشروط هي التي تحول الكود من مجرد قائمة مهام إلى نظام قادر على التكيف والاستجابة. كل تطبيق تستخدمه، من نتفليكس الذي يقترح عليك فيلماً، إلى تطبيق البنك الذي يحذرك من معاملة مشبوهة، إلى لعبة الفيديو التي يتفاعل فيها الأعداء مع حركتك، كلها تعمل بفضل شبكة معقدة من جمل `if/else`. لقد أضفت الآن "عقلاً" إلى الكود الخاص بك. لم يعد مجرد تابع أعمى، بل أصبح كيانًا يمكنه تقييم الظروف واتخاذ قرارات مستنيرة. هذه هي الخطوة الأولى الحاسمة على طريق بناء أي شيء يتجاوز أبسط البرامج النصية. إنها أساس الخوارزميات، والذكاء الاصطناعي، وكل البرامج التفاعلية. الآن بعد أن أصبح كودك قادرًا على اتخاذ القرارات، كيف نجعله يكرر المهام آلاف المرات في ثانية؟ كيف نجعله يعالج قائمة من ألف عنصر دون أن نكتب ألف سطر من الكود؟ هذا هو عالم **الحلقات التكرارية (Loops)**، وهو موضوعنا في الفصل القادم. {: .story-content .page-final .page-type-text .anim-fade-in dir="rtl"}
×

إعدادات القراءة

الوضع الليلي
حجم الخط 20px
نوع الخط
×

فهرس الكتاب