تنسيق كود بايثون تلقائياً باستخدام Black: دليل شامل لبرمجة احترافية
يُعدّ كتابة كود بايثون وظيفياً أمراً، وتنسيقه بطريقة احترافية ومقروءة أمراً آخر تماماً. غالباً ما يركز المبرمجون المبتدئون على التأكد من أن الكود يعمل فحسب، متناسين أهمية التنسيق السليم. قد تتمكن من تجاوز هذه المشكلة في برامج صغيرة لا تتجاوز بضعة آلاف من الأسطر، ولكن مع تزايد تعقيد المشاريع، يصبح الكود أصعب في الفهم والصيانة. في مرحلة معينة، قد تجد صعوبة في فهم الكود الذي كتبته بنفسك!
إن الفرق بين العمل على كود منسق جيداً والعمل على كود سيء التنسيق يشبه الفرق بين العيش في قصر منظم والعيش في منزل فوضوي. في هذا المقال، سنتعمق في أهمية تنسيق كود بايثون ونقدم لك أداة Black القوية التي ستغير طريقة كتابتك للكود.
لماذا يُعدّ تنسيق كود بايثون أمراً بالغ الأهمية؟
تتجاوز أهمية تنسيق الكود مجرد الجماليات، فهي تؤثر بشكل مباشر على جودة مشروعك وكفاءة فريق العمل. إليك الأسباب الرئيسية:
1. تحسين قابلية القراءة والفهم
- يساعد تنسيق الكود على قراءته بكفاءة وسرعة أكبر، مما يقلل من الجهد الذهني المطلوب لفهم تدفق البرنامج.
- يبدو الكود أكثر تنظيماً واحترافية، مما يترك انطباعاً إيجابياً لدى أي شخص يراجع عملك.
2. تعزيز فرصك في مقابلات العمل
- يهتم بعض المحاورين في مقابلات العمل البرمجية بمدى جودة تنسيقك للكود.
- قد يؤدي إهمال التنسيق إلى خسارة فرص وظيفية، حتى لو كان الكود يعمل بشكل صحيح، وذلك بسبب مظهره غير الاحترافي.
3. دعم العمل الجماعي الفعال
- تزداد أهمية تنسيق الكود بشكل كبير عند العمل ضمن فريق.
- من المرجح أن يعمل العديد من الأشخاص على نفس المشروع البرمجي، ويجب أن يكون الكود الذي تكتبه مفهوماً لزملائك لتجنب العقبات وتسريع عملية التطوير.
4. تسهيل اكتشاف الأخطاء وتصحيحها (Debugging)
- يمكن أن يجعل الكود سيء التنسيق اكتشاف الأخطاء أمراً صعباً للغاية ومستهلكاً للوقت.
- الكود غير المنظم لا يقلل فقط من الإنتاجية، بل إنه أيضاً مزعج بصرياً ويصعب التعامل معه.
أدوات فحص الكود الشائعة: Pylint و Flake8
يستخدم العديد من مطوري بايثون أدوات مثل Pylint أو Flake8 للتحقق من وجود الأخطاء ومطابقة الكود لمعايير الأسلوب. هذه الأدوات مفيدة للغاية:
Pylint: أداة قوية تفحص الأخطاء في بايثون، وتفرض معايير ترميز معينة، وتبحث عن “روائح الكود” (code smells). كما يمكنها اكتشاف أنواع معينة من الأخطاء، وتقديم اقتراحات حول كيفية إعادة هيكلة الكتل البرمجية، وتقديم تفاصيل حول تعقيد الكود.Flake8: مكتبة بايثون تجمع بينPyFlakesوpycodestyle(التي تفرض معاييرPEP8) وسكربتMcCabeالخاص بـNed Batchelder. إنها مجموعة أدوات ممتازة للتحقق من قاعدة الكود الخاصة بك مقابل أسلوب الترميز (PEP8)، وأخطاء البرمجة مثل “مكتبة مستوردة ولكن غير مستخدمة”، و”اسم غير معرف”، والكود غير المتباعد بشكل صحيح.
المشكلة تكمن في أن هذه الأدوات تكتفي بالإبلاغ عن المشاكل التي تحددها في الكود المصدري، وتترك عبء إصلاحها على عاتق مطوري بايثون! ولكن ماذا لو كان لدينا أداة يمكنها تحديد المشكلة وحلها في نفس الوقت؟
مقدمة إلى Black: المنسق التلقائي لكود بايثون
هنا يأتي دور Black! إنها أداة تسمح لك بتحديد الأخطاء وتنسيق كود بايثون الخاص بك في نفس الوقت، مما يزيد من إنتاجيتك بشكل كبير.

من ملف README الخاص بالمشروع:
“باستخدام
Black، توافق على التنازل عن التحكم في تفاصيل التنسيق اليدوي. في المقابل، يمنحكBlackالسرعة والحتمية والتحرر من إزعاجpycodestyleبشأن التنسيق. ستوفر الوقت والطاقة الذهنية لأمور أكثر أهمية.”
يمكن لـ Black إعادة تنسيق ملفك بالكامل في مكانه وفقاً لأسلوب تنسيق Black المحدد مسبقاً. يساعد هذا عقلك على التركيز على المشكلة التي تريد حلها وابتكار حلول برمجية، بدلاً من التشتت بسبب بنية الكود والاختلافات الأسلوبية البسيطة. دعنا نرى كيف يمكننا استخدامه.
تثبيت Black
يمكن تثبيت Black ببساطة عن طريق تشغيل الأمر pip install black. يتطلب Python 3.6.0+ للتشغيل. بمجرد تثبيت Black، ستتوفر لديك أداة سطر أوامر جديدة تسمى black في واجهة الأوامر الخاصة بك، وستكون جاهزاً للبدء!
كيفية استخدام Black لتنسيق الكود
للبدء فوراً بالإعدادات الافتراضية المعقولة، اختر ملف بايثون الذي تريد تنسيقه ثم اكتب black filename.py في الطرفية. سيقوم Black بعد ذلك بتنسيق ملف بايثون الخاص بك. الآن سنرى ما يمكن أن تساعدنا فيه Black.
1. تنسيق ملف واحد
لنلقِ نظرة على هذا المثال البسيط: هنا دالتان بايثون في ملف بايثون الخاص بي المسمى sample_code.py.

يمكنك استخدام black sample_code.py في الطرفية لتغيير التنسيق. بعد تشغيل Black، سترى المخرجات التالية:

بعد ذلك، يمكنك فتح ملف sample_code.py لرؤية كود بايثون المنسق:

أصبح كود بايثون الآن منسقاً وأكثر قابلية للقراءة.
2. تنسيق ملفات متعددة (مجلد كامل)
لتنسيق أكثر من ملف بايثون واحد، اكتب black folder_name/ في الطرفية.

تمت إعادة تنسيق ثلاثة ملفات بايثون داخل المجلد المسمى python_with_black.
3. التحقق من الملفات للتنسيق دون تعديل
إذا كنت لا تريد أن يغير Black ملفك، ولكنك تريد معرفة ما إذا كان Black يعتقد أن الملف يجب أن يتغير، يمكنك استخدام أحد الأوامر التالية:
black --check .: سيتحقق هذا الأمر من ملفات بايثون التي يمكن تنسيقها في المجلد الحالي (ولكنه لا يقوم بتعديل الملفات فعلياً).

black --check --diff file_name.py: يعرض هذا الأمر ما يحتاج إلى القيام به للملف دون تعديله فعلياً، مما يوضح الفروقات المقترحة.

4. تغيير عدد الأحرف لكل سطر
بشكل افتراضي، يحدد Black طول السطر بـ 88 حرفاً، ولكن يمكنك تغيير ذلك باستخدام الخيار -l أو --line-length. على سبيل المثال، لتغيير الطول إلى 60 حرفاً:
black -l 60 python_file.py
Black في Jupyter Notebook
لمستخدمي Jupyter Notebook، لا يزال بإمكانك تنسيق كود بايثون تلقائياً باستخدام إضافة بسيطة تسمى Jupyter Black. تقوم هذه الإضافة بإعادة تنسيق/تجميل الكود في خلية الكود الخاصة بالدفتر باستخدام Black. توفر إضافة Jupyter Black الميزات التالية:
- زر في شريط الأدوات.
- اختصار لوحة مفاتيح لإعادة تنسيق خلية الكود الحالية (الافتراضي:
Ctrl-B). - اختصار لوحة مفاتيح لإعادة تنسيق جميع خلايا الكود (الافتراضي:
Ctrl-Shift-B).
تثبيت Jupyter Black
أولاً، تأكد من تثبيت jupyter-contrib-nbextensions و black، ثم قم بتشغيل الأوامر التالية:
jupyter nbextension install https://github.com/drillan/jupyter-black/archive/master.zip --user
ثم قم بتمكين الإضافة عن طريق تشغيل:
jupyter nbextension enable jupyter-black-master/jupyter-black
الآن يمكنك البدء في تنسيق كود بايثون الخاص بك في كل خلية دفتر. أولاً، حدد خلية الدفتر التي تريد تنسيق كود بايثون الخاص بها ثم انقر فوق زر الإضافة المسمى Black.

ثم انقر فوق زر Jupyter Black:


دمج Black مع بيئات التطوير (Editors Integration)
يمكنك دمج Black مع محرراتك المفضلة. يدعم Black حالياً PyCharm/IntelliJ IDEA، Wing IDE، Vim، Visual Studio Code، Sublime Text 3، Atom/Nuclide، Kakoune، و Thonny. اتبع التعليمات هنا لدمج Black مع محرر الكود المفضل لديك.
إذا كنت ترغب في معرفة المزيد عن Black، أوصي بمشاهدة حديث PyCon 2019 بواسطة Łukasz Langa.
الخلاصة التقنية
تُعدّ أداة Black بمثابة نقلة نوعية في عالم تطوير بايثون، حيث تحول عملية تنسيق الكود من مهمة يدوية مملة ومستهلكة للوقت إلى عملية آلية سريعة ودقيقة. بفضل فلسفتها التي تفرض أسلوب تنسيق واحد غير قابل للتفاوض، تضمن Black اتساقاً مثالياً عبر جميع المشاريع والفرق، مما يقلل من النزاعات حول الأسلوب ويزيد من قابلية قراءة الكود. إن دمجها في سير عمل التطوير، سواء كان ذلك عبر سطر الأوامر، أو بيئات Jupyter Notebook، أو محررات الكود، يعزز الإنتاجية ويحرر المطورين للتركيز على منطق العمل الحقيقي بدلاً من التفاصيل الشكلية. إن تبني Black ليس مجرد خيار لتحسين الكود، بل هو استثمار في جودة المشروع وكفاءة الفريق على المدى الطويل.
إذا تعلمت شيئاً جديداً أو استمتعت بقراءة هذا المقال، يرجى مشاركته حتى يتمكن الآخرون من رؤيته. إلى ذلك الحين، نراكم في المنشور التالي!
يمكن التواصل معي أيضاً عبر Twitter @Davis_McDavid.