دليلك العملي لاستخدام الشروط (If) وحلقات التكرار (Loops) في بايثون

تعلم كيفية التحكم في سير البرنامج باستخدام الشروط (if) وحلقات التكرار (loops) في بايثون، واكتشف كيف تُستخدم هذه المفاهيم في تطوير مواقع الويب الحقيقية.

هل تخيلت يوماً أن الكود الذي تكتبه هو مجرد طريق مستقيم وممل بلا تقاطعات؟ عندما قمت برفع أول تطبيق ويب لي على خادم حقيقي باستخدام Flask منذ سنوات، ارتكبت خطأً كارثياً. الكود كان يُنفذ من السطر الأول حتى الأخير دون أي قدرة على التفكير؛ النتيجة؟ كان أي زائر للموقع قادراً على الدخول إلى لوحة تحكم الإدارة Admin Dashboard بمجرد كتابة الرابط، لأن السيرفر لم يكن يسأل ببساطة: "من أنت؟".

هنا أدركت أن البرمجة ليست مجرد كتابة أوامر متتالية، بل هي بناء "عقل" يتخذ القرارات. في عالم تطوير الويب، السيرفر الخاص بك يحتاج إلى توجيه. يحتاج إلى حارس أمن على بوابة الموقع، وإلى ساعي بريد ينظم عرض البيانات. هذا بالضبط ما تفعله أدوات التحكم في مسار البرنامج.

دليلك العملي لاستخدام الشروط (If) وحلقات التكرار (Loops) في بايثون

بيئة العمل والمتطلبات التقنية

لضمان تطبيق الأكواد الواردة في هذا الدرس بشكل مثالي، ستحتاج إلى:

بيئة تشغيل بايثون (Python 3.8+).
محرر نصوص خفيف مثل VS Code أو حتى Terminal مباشر التفاعل (REPL).
بيئة افتراضية Virtual Environment (مستحسن دائماً لتعلم بايثون بشكل نظيف دون تعقيدات النظام).
شغف لفهم كيف تعمل خوادم الويب في الخلفية.

أهداف التعلم

في هذا الدرس ضمن رحلتنا في تعلم بايثون، ستتمكن من:

فهم كيفية اتخاذ الكود للقرارات باستخدام أوامر if في بايثون.
استيعاب منطق حلقات التكرار loops للتعامل مع البيانات المتعددة.
ربط هذه المفاهيم الأساسية بسيناريوهات حقيقية في تطوير الويب ببايثون (Backend).

حارس البوابة وساعي البريد

تخيل أن تطبيق الويب الخاص بك هو مبنى ضخم:
جملة (if): هي حارس الأمن الواقف على باب المبنى. عندما يتقدم زائر، يسأله الحارس عن هويته. إذا if كان يملك تصريحاً (كلمة مرور صحيحة)، يفتح له الباب. وإلا else، يطرده.
حلقة التكرار (For Loop): هي عامل البريد الذي يملك حقيبة مليئة بالرسائل (بيانات من قاعدة البيانات). العامل يمر على كل صندوق بريد، واحداً تلو الآخر، ليضع الرسالة المناسبة، ولا يتوقف حتى يفرغ ما في حقيبته.

الشروط (if, Elif, Else)

في تطبيقات الويب الحقيقية المبنية بإطارات مثل Django أو Flask، نستخدم الشروط بشكل مكثف للتحقق من صلاحيات المستخدمين (Authentication). لا يمكنك السماح لمستخدم بتعديل مقال لا يملكه، ولا يمكنك السماح لقاصر بالوصول لمحتوى مقيد عمرياً.

كود للتجربة: حارس البوابة

لنفترض أننا نبني نظاماً مبسطاً للتحقق من عمر المستخدم قبل السماح له بتصفح الموقع:

# Simulating data coming from a web request
user_age = 20
is_banned = False

if is_banned:
    print("Sorry, your account has been banned from accessing the website.")
elif user_age >= 18:
    print("Welcome! You have been granted access to the dashboard.")
else:
    print("Sorry, this content is for adults only. Redirecting you to the home page.")
تحليل عميق للكود:

السطر الأول والثاني يقومان بحجز مساحة في الذاكرة Memory لتخزين نوعين من البيانات: رقم صحيح Integer وقيمة منطقية Boolean. هذه المتغيرات تحاكي البيانات التي نلتقطها عادة من الـ Request في تطبيقات الويب.

في السطر الرابع، يبدأ مسار التحكم. باستخدام الكلمة المحجوزة if، يقوم المُفسر Interpreter بتقييم التعبير المنطقي. إذا كانت قيمة is_banned تساوي True، سيُنفذ الكود التابع لها ويتجاهل الباقي فوراً تعقيد زمني O(1).

لكن بما أنها False، ينتقل المحرك إلى elif لتقييم الشرط الثاني user_age >= 18. عملية المقارنة هذه تتم في وحدة الحساب والمنطق بالمعالج. نظرًا لأن 20 أكبر من 18، يتم تقييم الشرط كـ True وتُطبع رسالة الترحيب. الكلمة else تعمل كشبكة أمان نهائية (Fallback) تلتقط أي حالة لم تحقق الشروط السابقة. هذا التصميم يمنع تسرب البيانات (Data Leaks) ويضمن إغلاق مسار الرد Response بشكل آمن.

تلميحة برمجية: في تطبيقات الويب، تجنب كتابة شروط متداخلة Nested if بشكل مبالغ فيه (ما يُعرف بـ Arrow Anti-Pattern). استخدم دائماً العودة المبكرة Early Return لجعل الكود أنظف وأسهل في القراءة والصيانة.

أتمتة المهام: حلقات التكرار (For Loop)

لا يوجد تطبيق ويب لا يعتمد على عرض القوائم. تخيل أنك تبني مدونة وتريد عرض 100 مقالة في الصفحة الرئيسية. هل ستكتب أمر الطباعة 100 مرة؟ بالطبع لا. هنا يأتي دور حلقات التكرار loops.

كود للتجربة: ساعي البريد للبيانات

سنقوم بكتابة كود يحاكي جلب أسماء مستخدمين من قاعدة البيانات وعرضهم على الشاشة:

# Simulating a list retrieved from a database query
db_users = ["Ahmed", "Sara", "Khaled"]

print("Initializing user interface...")

for user in db_users:
    # Generating mock HTML list items for each user
    print(f"
  • Welcome user: {user}
  • ") print("List loading complete.")
    تحليل عميق للكود:

    نبدأ بتعريف قائمة List تحتوي على نصوص Strings في الذاكرة (وهي تمثل هيكل بيانات Data Structure قابل للتكرار Iterable).

    تعمل حلقة for بطريقة ذكية؛ فهي تستدعي دالة داخلية تسمى __iter__() على القائمة، ثم تبدأ في طلب العنصر التالي في كل دورة. المتغير user هو مجرد مؤشر مؤقت (Pointer) يشير إلى العنصر الحالي في الذاكرة خلال الدورة النشطة.

    استخدمنا هنا ميزة f-strings الحديثة في بايثون لدمج المتغير داخل النص مباشرة، وهي أسرع وأكثر كفاءة من طرق التجميع التقليدية (Concatenation). التعقيد الزمني لهذا الكود هو O(N) حيث N يمثل عدد المستخدمين في القائمة. كلما زاد عدد المستخدمين، زاد الوقت اللازم للتنفيذ خطياً.

    تنبيه تقني: عند التعامل مع قواعد بيانات ضخمة تحتوي على ملايين السجلات، إياك أن تقوم بتحميلها كلها دفعة واحدة في حلقة for واحدة، لأن هذا سيؤدي لاستهلاك الذاكرة العشوائية RAM بالكامل (Memory Exhaustion). استخدم دائماً تقنيات التجزئة Pagination أو التوليد Generators.

    التكرار المشروط: حلقات (While Loop)

    أحياناً في تطوير الويب، لا نعرف عدد العناصر مسبقاً، لكننا نريد استمرار تنفيذ أمر ما "طالما" أن شرطاً معيناً يتحقق. مثلاً: انتظار استجابة من خادم خارجي (API)، أو تشغيل سكريبت يعمل في الخلفية لمراقبة حالة النظام. حلقة while تستمر في العمل حتى يصبح شرطها False.

    تطوير الكود

       
          التحدي المصغر: تخيل أن لديك القائمة التالية من المستخدمين الذين سجلوا دخولهم للتو: ["Salem", "Fatima", "Admin", "Yusuf"]    
    تلميحة الحل والأكواد المقترحة

    المطلوب: استخدم حلقة for للمرور على هذه القائمة. وداخل حلقة التكرار، استخدم جملة if للتحقق من اسم المستخدم. إذا كان اسم المستخدم هو "Admin"، اطبع له رسالة خاصة: "مرحباً بك أيها المدير، لوحة التحكم جاهزة". أما بقية المستخدمين، اطبع لهم رسالة عادية: "مرحباً بك [اسم المستخدم] في الموقع". (تلميح منطقي: ستحتاج إلى وضع if و else بمسافة بادئة Indentation صحيحة داخل نطاق الـ for loop، ومقارنة المتغير المؤقت بكلمة "Admin").

    أسئلة المراجعة

    ماذا يحدث إذا نسينا كتابة else في نهاية سلسلة الشروط؟
    متى يُفضل استخدام While بدلاً من For من وجهة نظرك؟

    الخاتمة والدروس المستفادة

    التحكم في سير البرنامج ليس مجرد قواعد نحوية في البرمجة، بل هو أداة التفكير الأساسية التي تميز التطبيقات الديناميكية الذكية عن الصفحات الثابتة. من خلال دمج أوامر if لاتخاذ القرارات الأمنية والمنطقية، وحلقات التكرار loops للتعامل بكفاءة مع قواعد البيانات، أنت تضع حجر الأساس في مسيرتك لاحتراف تطوير الويب (Backend).

    هل واجهتك مشكلة أثناء تطبيق هذا المشروع؟

    لا تبرمج بمفردك! شارك لقطة شاشة للخطأ (Screenshot) في مجتمعنا لنحلها معاً.

    انضم لمجتمع الشفرة والحلول
    إداره شروحات كود
    إداره شروحات كود
    أكثر من مجرد مدونة؛ نحن مجتمع يجمع الشغوفين بالتقنية والذكاء الاصطناعي. نشارككم رحلة التعلم، نبسط المفاهيم المعقدة، ونبني معكم المستقبل.. سطر كود تلو الآخر.
    تعليقات