بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
الفرق بين إستخدام if بشكل متتالي وحدها وإستخدام elif معها في بايثون .
1-أولا بشكل سريع جدا بعض الشرح عن if .
تستخدم if في كل لغات البرمجة لتنفيذ سطر أكواد أو أكثر لكن في حال تحقق شرط محدد بمعنى اخر لنفترض انك تقول لأخوك الصغير عندما يأتي صديقي حارث أيقظني من النوم
عمل if شيء كهذا لن تنفذ الأكواد التابعة لها إلا في حال تحقق الشرط ,في بايثون الأكواد التابعة لها تكون في السطر الذي تحتها ويكون هذا السطر متقدم على سطر if بمسافات فارغة من خلال الضغط على مفتاح Tab في لوحة المفاتيح عدد المسافات الفارغة يحدده إعدادات محرر النصوص المستخدم لكن غالبا يكون أربع مسافات فارغة.
نلاحظ تحقق الشرط وتم تنفيذ سطر الكود التابع له الذي معنا الأن هو طباعة رقم عشرة ملاحظة ممكن أن يكون أكثر من سطر.
لم يتحقق الشرط لن يتم تنفيذ سطر الكود الخاص ب if .
2-الأن الفرق بين إستخدام if لوحدها وإستخدام elif معها نتابع بالصور .
في حال إستخدام if عدت مرات بشكل متتالي سيتم التحقق من كل الشروط والتعامل معها .
في حال إستخدام elif بعد if سيتم تنفيذ أول شرط يتحقق مهما كان ترتيبه وتجاهل الباقين .
مثال من الحياة العادية لتتوضح الأمور :
لنفترض انك طلبت من أخوك الذهاب إلى الدكان لشراء بعض الأشياء وقلت له إذا وجدت عصير البرتقال إشتري منه وإذا وجدت عصير الجزر إشتري منه وإذا وجدت عصير التفاح إشتري منه و...إلخ هذا يمثل إستخدام if بشكل متتالي .
لنفترض طلبت منه مرة أخرى الذهاب إلى الدكان وقلت له إذا وجدت عصير البرتقال أشتري منه وإرجع للمنزل إذا لم تجده ووجدت عصير التفاح إشتري منه وإرجع للمنزل وهكذا ...إلخ هذا يمثل elif مع if .
الأن سؤال هل الأفضل إستخدام if بشكل متتالي أو إستخدام elif معها؟
الجواب لايوجد أفضل يوجد ماذا أحتاج انا .
-في حال أردنا أن ننفذ شرط واحد يتحقق وتجاهل الباقين نستخدام elif مثال في الأسفل ساتحقق من وجود بعض مديري الحزم في توزيعات لينكس ثم طبع إسم التوزيعة بناءا على وجود مدر الحزم من عدمه وهنا احتاج تحقق شرط واحد فقط وتجاهل الباقين لهذا سأستخدم elif.
كما نعلم أنا فيدورا فيها مدير الحزم القديم yum ومدير الحزم الجديد اما ريدهات فيها فقط yum هنا وضعت شرط داخل شرط, أولا شرط إذا كان yum موجود يتم النزول على بلوك الكود وهناك يوجد شرط ثاني أي شرط داخل شرط إذا كان dnf موجود إطبع Fedora اما غير ذلك (else) إطبع Redhat وهكذا ممكن وضع شرط داخل شرط وليس بالضرورة شرطين ممكن أكثر كما في الصورة في الأسفل .
قد تجد الامر معقد لكن تابع الكود سطر سطر وتابع ما هي الشروط التي تتحقق ستفهم ماذا يحصل ملاحظة os.uname().machine ترجع نص إذا كان هذا النص كلمة x86_64 يكون النظام 64bit غير ذالك يكون شيء أخر مثلا 32bit او ARM وكل معمارية لها نص لكن هنا حتى لا اعقد الامور أكثر إعتبرت أنه إذا لم يكن x86_64 سيكون 32bit .
-الأن مثال عن إستخدام if وحدها بشكل متتالي لنفترض أريد التأكد من وجود مجلدين وإذا لم يكونو موجودين يعني إذا تحقق الشرط ان المجلد الفولاني غير موجود ينفذ الكود التابع ل if لإنشاء مجلد من خلال os.mkdir في هذا المثال أريد التأكد من وجود المجلدين لهذا لا مجال لإستخدام elif .
الكود كأنني أقول إذا لم يكن هناك مجلد بهذا الإسم والمسار نفذ os.mkdir أي قم بإنشاء مجلد بهذا الإسم والمسار لو إستخدمنا elif مع if سيتم تنفيذ أول شرط ثم يتوقف أي سيتم إنشاء أول مجلد فقط الذي هو myfolder1111.