Indentation في Python هي المسافات أو علامات الجدولة الموجودة في بداية السطر، وتستخدمها Python لتحديد كتل الكود. لذلك فهي ليست مجرد تنسيق لتحسين شكل البرنامج؛ تغيير مستوى المسافة قد يغيّر البنية التي يفهمها المفسر.
عندما تكتب بنية متعددة الأسطر مثل if أو for أو while أو def، يجب أن يكون جسم الكتلة مزاحًا للداخل بمستوى ثابت. أما 4 مسافات فهي التوصية القياسية في PEP 8 وليست رقمًا تفرضه قواعد اللغة في كل حالة.
{alertInfo} الخلاصة السريعة: Python تستخدم مستوى المسافة البادئة لتجميع الأسطر داخل الكتل. اتبع PEP 8 واستخدم 4 مسافات لكل مستوى، وفضّل Spaces على Tabs، وحافظ على مستويات متسقة داخل الكود.
{getToc} $title={محتوى المقال}
إذا كنت تتابع السلسلة بالترتيب، يمكنك مراجعة أساسيات بايثون 2: كتابة أول كود بايثون.
ما معنى Indentation في Python؟
المسافة البادئة هي الفراغ الموجود في بداية السطر. في Python يُستخدم هذا المستوى لتحديد أن مجموعة من الأوامر تنتمي إلى كتلة واحدة، مثل جسم شرط أو حلقة أو دالة.
مثال:
age = 20
if age >= 18:
print("Allowed")
print("Done")
السطر print("Allowed") داخل كتلة if لأنه مزاح إلى الداخل، بينما print("Done") عاد إلى المستوى الأساسي ولذلك يُنفذ خارج الشرط.
لماذا Indentation مهمة في Python؟
في لغات كثيرة تُستخدم الأقواس المعقوفة { } أو كلمات خاصة لتحديد بداية الكتلة ونهايتها. Python تعتمد على المسافة البادئة نفسها لتحديد تجميع الأوامر، ولهذا فهي جزء من صياغة اللغة وليست مجرد اختيار شكلي.
تظهر Indentation داخل تراكيب كثيرة، منها:
- الشروط:
if / elif / else. - الحلقات:
for / while. - الدوال:
def. - الكلاسات:
class. - التعامل مع الاستثناءات:
try / except / finally. - كتل أخرى مثل
with.
{alertSuccess} الفكرة المهمة ليست حفظ عدد المسافات فقط، بل فهم أن تغيير مستوى Indentation يعني دخول كتلة أو الخروج منها.
هل يجب استخدام 4 مسافات في Python؟
4 مسافات لكل مستوى هي توصية PEP 8 القياسية، وهي الأسلوب الذي يجب أن تتبعه في الأكواد الجديدة. لكن من الناحية النحوية، Python لا تشترط أن يكون كل مستوى مكوّنًا من 4 مسافات تحديدًا؛ المهم أن تكون مستويات الكتلة متسقة وصحيحة.
هذا الكود يستخدم 4 مسافات، وهو الأسلوب الموصى به:
if 10 > 5:
print("Correct style")
وقد يعمل كود بمقدار مختلف من المسافات إذا كانت البنية متسقة، لكن ذلك لا يجعله أسلوبًا جيدًا. للمبتدئ: اضبط المحرر على 4 Spaces لكل مستوى والتزم بها.
| السؤال | الإجابة |
|---|---|
| هل Indentation مطلوبة في Python؟ | نعم، لتحديد كتل الكود. |
| هل 4 مسافات شرط نحوي دائمًا؟ | لا؛ هي توصية PEP 8 القياسية. |
| ما الأفضل في الأكواد الجديدة؟ | 4 مسافات لكل مستوى. |
| هل يجب ثبات المستوى داخل الكتلة؟ | نعم، يجب أن تعبّر المسافات عن البنية نفسها بشكل متسق. |
قواعد Indentation الأساسية في Python
- ازح جسم الكتلة إلى الداخل بعد رأس بنية متعددة الأسطر مثل
ifأوforأوdef. - اجعل الأوامر الموجودة في المستوى نفسه على Indentation متساوية.
- عند الدخول إلى كتلة داخل كتلة، أضف مستوى جديدًا.
- عند انتهاء الكتلة، ارجع إلى مستوى سابق صحيح.
- في الأكواد الجديدة استخدم 4 Spaces لكل مستوى وفق PEP 8.
- فضّل Spaces على Tabs ولا تخلط أسلوبين بطريقة تجعل مستوى الكود ملتبسًا.
المسافات البادئة المتداخلة Nested Indentation
عند وجود كتلة داخل أخرى، يزيد مستوى المسافة. مع أسلوب 4 Spaces يكون المستوى الأول 4 مسافات والثاني 8 مسافات وهكذا:
x = 10
if x > 5:
print("First level")
if x > 8:
print("Second level")
print("Back to first level")
print("Outside blocks")
لاحظ أن الرجوع من 8 مسافات إلى 4 مسافات يعني الخروج من الشرط الداخلي والعودة إلى الشرط الخارجي، والرجوع إلى بداية السطر يعني الخروج من الكتلتين.
ما الفرق بين Tab وSpace في Python؟
يمكن أن تتكون المسافة البادئة في المصدر من Spaces أو Tabs، لكن PEP 8 تفضّل Spaces. وتوصي باستخدام Tabs فقط للمحافظة على الاتساق في كود قديم يستخدم Tabs بالفعل.
توثيق Python يوضح أن خلط Tabs وSpaces يصبح خطأ عندما يجعل معنى مستوى المسافة يعتمد على طريقة تفسير Tab، وعندها قد يظهر TabError. لذلك الحل العملي الآمن هو ضبط محررك بحيث يحول زر Tab إلى Spaces.
| الخيار | التوصية |
|---|---|
| 4 Spaces | الاختيار الموصى به للأكواد الجديدة. |
| Tab characters | تجنبها في الكود الجديد؛ قد تستخدم للمحافظة على كود قائم يستخدمها أصلًا. |
| خلط Tabs وSpaces | تجنبه لأنه قد يجعل مستويات Indentation غير متسقة ويسبب TabError. |
ماذا يحدث إذا كانت المسافات البادئة خاطئة؟
إذا لم تكن مستويات المسافات متوافقة مع بنية الكود فقد يمنع Python تشغيل البرنامج ويظهر خطأ مثل IndentationError أو TabError. في هذا الدرس يكفي أن تتذكر أن السبب يكون في مستوى الكتلة، أما تشخيص رسائل الخطأ المختلفة وإصلاحها بالتفصيل فله دليل مستقل.
راجع: حل خطأ IndentationError في Python خطوة بخطوة.
{alertWarning} لا نحاول هنا تحويل درس Indentation إلى دليل أخطاء؛ افهم قاعدة الكتل أولًا، ثم استخدم دليل IndentationError عندما تظهر لك رسالة خطأ فعلية.
Indentation داخل if وfor وdef
الفكرة نفسها تتكرر في جميع كتل Python. رأس الكتلة يحدد البداية، والأسطر التابعة له تكون أعمق بمستوى واحد:
داخل if
score = 75
if score >= 50:
print("Pass")
else:
print("Fail")
داخل for
for i in range(3):
print(i)
print("Finished")
داخل def
def say_hello():
print("Hello Python")
say_hello()
للتوسع في هذه التراكيب راجع الشروط if وelse، الحلقات Loops، والدوال Functions.
مثال: كيف يغيّر Indentation معنى الكود؟
في المثال التالي، أمر الطباعة الأخير خارج الشرط:
logged_in = False
if logged_in:
print("Welcome")
print("Program finished")
لأن logged_in تساوي False فلن تظهر Welcome، لكن Program finished ستظهر لأنها خارج كتلة if.
كيف تضبط محرر الكود على Indentation صحيحة؟
في معظم المحررات الحديثة يمكنك اختيار أن يؤدي زر Tab إلى إدخال 4 Spaces. هذا يجمع بين سهولة الضغط على Tab وبين حفظ الملف بمسافات عادية، وهو اختيار مناسب للمبتدئين.
- اختر Indent Size = 4.
- فعّل Insert Spaces أو Convert Tabs to Spaces عندما يتوفر الخيار.
- استخدم إظهار whitespace مؤقتًا إذا شككت في وجود Tabs أو Spaces غير متوقعة.
- لا تعتمد على شكل المسافة فقط؛ راجع مستوى الكتلة منطقيًا.
تمرين 1: حدد داخل الكتلة وخارجها
ما السطور التي تعمل فقط عندما يكون الشرط صحيحًا؟
temperature = 35
if temperature > 30:
print("Hot")
print("Drink water")
print("Done")
السطران Hot وDrink water داخل الشرط، بينما Done خارج الكتلة.
تمرين 2: اكتب مستويين من Indentation
اكتب شرطًا يتحقق أولًا من أن الرقم موجب، ثم شرطًا داخله يتحقق من أنه أكبر من 100. اجعل رسالة ثالثة خارج الشرطين لتتأكد أنك فهمت الدخول إلى الكتل والخروج منها.
أسئلة شائعة حول Indentation في Python
ما معنى Indentation في Python؟
هي المسافات أو Tabs في بداية السطر التي تستخدمها Python لتحديد مستويات الكتل وتجميع الأوامر.
هل 4 مسافات إلزامية في Python؟
4 مسافات هي توصية PEP 8 القياسية وليست عددًا يفرضه Syntax في كل كتلة. مع ذلك، استخدم 4 Spaces في الأكواد الجديدة لأنها القاعدة المتعارف عليها والأوضح.
هل يمكن استخدام Tab بدل Space؟
يمكن أن تحتوي ملفات Python على Tabs، لكن PEP 8 تفضّل Spaces. وفي الأكواد الجديدة الأفضل ضبط زر Tab ليضيف Spaces بدل حرف Tab فعلي.
لماذا لا تستخدم Python الأقواس المعقوفة للكتل؟
Python تعتمد على مستويات Indentation نفسها لتحديد تجميع الأوامر، ولهذا تؤثر المسافة البادئة في بنية البرنامج مباشرة.
متى أزيد مستوى Indentation؟
عندما تدخل جسم كتلة جديدة، مثل جسم if أو for أو def. وإذا دخلت كتلة داخلها تضيف مستوى آخر.
ما الفرق بين Indentation وIndentationError؟
Indentation هي قاعدة بناء الكتل في Python، أما IndentationError فهو خطأ يظهر عندما لا تتوافق المسافات البادئة مع البنية المتوقعة. لدينا دليل مستقل لحل IndentationError.
مصادر وروابط مفيدة
- Python Documentation — Indentation
- PEP 8 — Indentation
- أساسيات بايثون 4: التعليقات Comments
- مشكلة وحل: IndentationError في بايثون
خلاصة الدرس
Indentation في Python هي الوسيلة التي تحدد بها اللغة كتل الكود. عند الدخول إلى كتلة جديدة، ازح الأوامر التابعة لها إلى الداخل، وعند الخروج منها ارجع إلى مستوى سابق صحيح.
اتبع PEP 8 واستخدم 4 Spaces لكل مستوى في الأكواد الجديدة، وفضّل Spaces على Tabs. لكن تذكر الفرق التقني المهم: الأربع مسافات توصية أسلوبية قياسية، بينما المتطلب النحوي هو أن تعبر مستويات المسافة عن بنية الكتل بشكل صحيح ومتسق.
{alertSuccess} إذا فهمت أن Indentation تعني «مستويات الكتل» وليس مجرد «ضغط Space أربع مرات»، فستفهم الشروط والحلقات والدوال والكلاسات بصورة أسهل بكثير.
في الدرس القادم سنتعلم التعليقات Comments في بايثون وكيف نستخدمها لشرح الكود وجعله أوضح.