Menu
العربية
جرّب في Playground

قواعد بناء جملة بايثون: المسافات البادئة والأسطر

تعرّف على القواعد الأساسية التي تهتمّ بها لغة بايثون: المسافة البادئة، الأسطر، النقطتان الرأسيتان، والفرق بين الأحرف الكبيرة والصغيرة، بأسلوب مبسّط وبدون تعقيد.

أصغر كتاب قواعد ممكن

سمعة لغة بايثون بأنها سهلة القراءة لها سبب واضح: قواعد لغة بايثون قليلة جدًا مقارنة بغيرها. القواعد المهمة فعلًا تكفيها صفحة واحدة:

  • تعليمة واحدة في كل سطر.
  • المسافة البادئة في بايثون هي التي تحدد البنية — لا أقواس، ولا كلمة end في النهاية.
  • الفرق بين الأحرف الكبيرة والصغيرة في بايثون مهم. name و Name متغيران مختلفان تمامًا.
  • النقطتان : تفتحان كتلة جديدة، والأسطر التي تليها بمسافة بادئة هي محتوى هذه الكتلة.
  • الرمز # يبدأ تعليقًا.

هذا كل شيء تقريبًا. وما تبقى مجرد متغيرات ودوال وعادات في استخدام المكتبة القياسية، وستلتقطها تدريجيًا مع الممارسة. هيا نمر على هذه القواعد الخمس بهدوء حتى تتحول في ذهنك من قواعد جافة إلى شكل طبيعي للغة.

تعليمة واحدة لكل سطر

التعليمة (statement) هي أمر كامل: "اطبع هذا"، "اجمع هذين"، "أسنِد تلك القيمة". في بايثون، كل تعليمة تأخذ سطرها الخاص:

main.py
Output
Click Run to see the output here.

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

وإذا احتجت فعلاً إلى سطر طويل، فبإمكانك تقسيمه عند نقطة مناسبة داخل الأقواس الهلالية () أو المعقوفة [] أو المجعّدة {} — ولن تعترض بايثون على ذلك:

main.py
Output
Click Run to see the output here.

أو، وهو أسلوب أقل شيوعًا، يمكنك إنهاء السطر بشرطة مائلة عكسية \ لإكماله في السطر التالي. لكن يُفضَّل استخدام الأقواس ما أمكن، فهذا هو الأسلوب السائد في معظم المشاريع.

المسافة البادئة في بايثون جزء من بنية الكود

هنا تكمن النقطة التي يتعثّر فيها أغلب المبتدئين. في لغة بايثون، المسافات البيضاء في بداية السطر لها معنى حقيقي، فهي التي تُخبر بايثون أي الأسطر تنتمي لبعضها.

لنلقِ نظرة على مثال بسيط باستخدام if:

main.py
Output
Click Run to see the output here.

السطران اللذان يأتيان بعد if hour < 12: مُزاحان بأربع مسافات. بايثون يقرأ هذه الإزاحة على أنها "هذان السطران هما جسم الـ if". أما السطر الأخير print فهو ملتصق بالهامش، لذا يعتبره بايثون خارج الـ if.

لو حذفت المسافة البادئة، سينكسر الـ if. ولو أضفت مسافة زائدة واحدة فقط، سينكسر الـ if أيضاً. بايثون صارم في هذه النقطة لأن المسافة البادئة هي التي تحدد البنية — لا يوجد { ولا end يدعمانها.

من هنا تظهر لنا بعض القواعد:

  1. اعتمد أربع مسافات لكل مستوى إزاحة والتزم بها. هذا هو العُرف المتبع في PEP 8، وهو الإعداد الافتراضي لأي محرر عند التعامل مع ملفات .py.
  2. لا تخلط بين الـ Tab والمسافات. بايثون 3 سيرفض أي ملف يستخدم الاثنين معاً. المحررات الحديثة تحوّل الـ Tab إلى مسافات تلقائياً عند الحفظ، فتأكد أن محررك مضبوط على ذلك.
  3. أخطاء الإزاحة ستحدث لا محالة. وعندما تظهر، ستخبرك رسالة IndentationError في بايثون برقم السطر المسبّب للمشكلة. اذهب إلى ذلك السطر وتأكد أن المسافات البادئة فيه مطابقة لأخواته.

النقطتان الرأسيتان تفتحان كتلة جديدة

كل بنية تُنشئ كتلة متداخلة — if، else، for، while، def، class، with، try — تنتهي جملتها الافتتاحية بنقطتين رأسيتين (:). والأسطر التي تليها، بعد إزاحتها، تُشكّل جسم الكتلة:

main.py
Output
Click Run to see the output here.

هناك أمران ينبغي الانتباه إليهما: النقطتان الرأسيتان في نهاية السطر الأول، والمسافة البادئة المكونة من أربع مسافات في الأسطر التي تليه. إذا نسيت النقطتين، ستخبرك بايثون برسالة من قبيل SyntaxError: expected ':'. وهذا الخطأ واضح لا لبس فيه — أضف علامة الترقيم الناقصة وستسير الأمور.

الفرق بين الأحرف الكبيرة والصغيرة في بايثون

تتعامل بايثون مع Name و name و NAME على أنها ثلاثة أشياء مختلفة تمامًا. وهذا ينطبق على:

  • المتغيرات والدوال التي تعرّفها بنفسك.
  • الدوال المدمجة مثل print و len و True و False و None.
  • أسماء الوحدات (modules) والسمات (attributes).

في الغالب لن تصطدم بهذه المشكلة إلا حين تكتب حرفًا كبيرًا عن طريق الخطأ. فـ True هي قيمة الصواب المنطقية، أما true فمتغير غير معرّف يُطلق الخطأ NameError. و Print(...) ليست هي الدالة print — بل مجرد خطأ إملائي.

إذا ظهرت لك رسالة خطأ تقول "name 'X' is not defined" وأنت متأكد أنك عرّفته، فافحص الأحرف الكبيرة والصغيرة أولًا. في تسع حالات من عشر يكون هذا هو السبب.

التعليقات باستخدام #

كل ما يأتي بعد # في السطر يُعدّ تعليقًا — وتتجاهله بايثون تمامًا. التعليقات ملاحظات تتركها لمن يقرأ الكود لاحقًا (بما في ذلك نفسك في المستقبل):

main.py
Output
Click Run to see the output here.

لا تحتوي بايثون على صيغة خاصة للتعليقات متعددة الأسطر. إذا احتجت لعدة أسطر، استخدم عدة أسطر تبدأ بـ #. (قد تصادف أحياناً استخدام النصوص ذات الاقتباس الثلاثي كأنها تعليقات — لكن هذه في الحقيقة شيء مختلف يُسمى docstring، وسنتطرق له عند الحديث عن الدوال.)

الكلمات المحجوزة في بايثون

هناك كلمات لا يمكنك استخدامها كأسماء للمتغيرات لأن بايثون نفسها تستعملها: if, else, for, while, def, class, return, import, from, as, pass, break, continue, True, False, None, and, or, not, in, is, lambda, try, except, finally, raise, with, yield, global, nonlocal, async, await. لا داعي لحفظ هذه القائمة عن ظهر قلب. فبمجرد أن تحاول استخدام إحداها، ستعترض بايثون فوراً.

أصبحت الآن قادراً على قراءة أي ملف بايثون

كل قاعدة قرأتها للتو تنطبق على أي ملف بايثون — سواء كان سكربتاً من سطرين أو مشروعاً يحتوي على مئة ألف سطر. بقية اللغة مبنية فوق هذه الأفكار الخمس. وإذا بدا لك ملفٌ ما مُربكاً، فالحل غالباً هو أن تنتبه للمسافة البادئة أولاً. فالمسافة البادئة وحدها تكشف لك ما يفعله الكود، حتى قبل أن تقرأ محتوى السطور.

الخطوة التالية: التعليقات بشيء من التفصيل — بالإضافة إلى الـ docstrings، وهي الطريقة التي تعتمدها بايثون لتوثيق الدوال والوحدات.

الأسئلة الشائعة

لماذا تهتمّ بايثون بالمسافة البادئة إلى هذا الحدّ؟

لأنّ بايثون تعتمد على المسافة البادئة لتحديد الأسطر التي تنتمي إلى نفس الكتلة البرمجية. بينما تستخدم لغات أخرى الأقواس المعقوفة { } لتجميع الأوامر، تكتفي بايثون بمسافات بادئة منتظمة في بداية السطر. النتيجة كود أنظف بصريًا، لكنّه يعني أنّك لا تستطيع التساهل مع المسافات.

كم عدد المسافات المطلوبة للمسافة البادئة في بايثون؟

المعيار المتّبع في المجتمع هو أربع مسافات لكل مستوى، وهذا ما يوصي به دليل PEP 8. معظم المحرّرات تُدرج أربع مسافات تلقائيًا عند الضغط على Tab داخل ملف بايثون. العدد بحدّ ذاته أقلّ أهمّية من الالتزام به بشكل موحّد — فالخلط بين مسافتين وأربع مسافات داخل نفس الكتلة من أشهر أسباب الأخطاء.

هل تفرّق بايثون بين الأحرف الكبيرة والصغيرة؟

نعم، تمامًا. فـ Name و name و NAME تُعتبر ثلاثة متغيّرات مختلفة تمامًا. والأسماء المدمجة مثل print و True يجب كتابتها بالضبط كما هي — True تعمل، أمّا true فتُسبّب خطأ.

تعلّم البرمجة مع Coddy

ابدأ الآن