GreatBahram
GreatBahram
خواندن ۳ دقیقه·۵ سال پیش

موثرتر کار کنیم - Black

The uncompromising Python code formatter
The uncompromising Python code formatter

مقدمه

سلام،

هدف‌مون از سری «موثرتر کار کنیم» این هست که بتونیم زمان‌مون رو از کارهای زمان‌گیر و کم‌عمق - که امکان automate کردن‌شون وجود داره - برای کارهای مهم‌تر ذخیره کنیم. توی این قسمت می‌خوایم با یک ابزار خیلی خوب آشنا بشیم که نگرانی ما رو نسبت به کد استایل‌مون کمتر کنه و زمان‌ بدست اومده رو ببریم جای‌ مهم‌تری به کار ببریم.

معرفی

پایتون به خاطر سادگی‌اش خیلی از آدم‌ها رو به خودش جذب می‌کنه. اما یک مساله‌ای که وجود داره این هست که با وجود داکیومنت‌ خوبی مثل PEP8 بازم بین توسعه‌دهنده‌ها اختلاف نظر زیادی، راجعبه کد‌استایل، وجود داره.

به‌ همین خاطر ابزارهای مختلفی برای این کار ساخته شدند که یک گزارش راجعبه بخش‌هایی که کداستایل فایل مطابق با PEP8 نبوده می‌دن.مثلاً فلان‌جا باید newline به کار بره و مثال‌های مختلف دیگه‌ای که باهاشون آشنا هستیم.

از این دسته از ابزارها میشه به پروژه‌های زیر اشاره کرد:

  • pycodestyle
  • flake8
  • ...
  • یک نکته‌ای که خوب هست بهش اشاره کنیم، اینه که توی Editor‌های جدید این ابزارها با Editor یکپارچه (integrate) شدن به‌ همین خاطر هست که معمولاً پایین IDE یک سری خطاها به شما اعلان میشه.


ولی چی می‌شد که اگر یک Code Formatter وجود داشت که خودش فایل رو می‌گرفت و مشکلات رو هم خودش برطرف می‌کرد؟

مهم‌ترین ویژگی‌ای این برنامه‌ هم قطعی بودن deterministic هست. یعنی فارغ از اینکه چندبار روی یک پروژه اجراش کنیم همیشه یک خروجی یکسان به ما بده. اینجوری خیلی قابل اتکاتر میشه!

«بروزرسانی شده»

به این دسته از ابزارها که کد رو به عنوان ورودی می‌گیرند و سعی در درست کردن فرمت اون می‌کنند اصطلاحاً Auto code formatter گفته میشه.

از Auto code formatter های بنام پایتون میشه به موارد زیر اشاره کرد:

ما توی این سری، تصمیم گرفتیم که فقط به Black بپردازیم، چون تقریباً ویژگی که می‌خواهیم رو داره و بنظر من سادگی Black کار با اون رو راحت‌تر و دلچست تر می‌کنه.

Black Logo
Black Logo

استفاده از Black

مثل همیشه اول باید نصب‌اش کنیم:

  • برای استفاده از بلک باید حداقل از پایتون ۳.۶ استفاده کنید.

خب حالا یک برنامه به Command-line‌تون اضافه شده که می‌تونید ازش استفاده کنید، فرض کنید قطعه کد پایین رو داریم و می‌خوایم ببنیم بلک چجوری می‌تونه به ما کمک کنه:

خب، حالا کافیه به بلک بگیم که فایل ما رو اصلاح کنه:

خروجی بالا، به ما میگه که بلک فایل ما رو reformat کرده (به صورت پیش‌فرض بلک فایل‌های شما رو تغییر میده، مگر اینکه بهش بگید اینکار رو نکنه!).

خب، حالا ببنیم که کد‌مون چه تغییری کرده:

  • احتمالاً شما هم متوجه این می‌شید که سازنده‌های بلک علاقه‌ زیادی به استفاده از double-quotation داشتند.

بلک، یک آپشن خیلی خوب هم داره که باعث میشه فقط کد رو بررسی کنه و اگر چیزی برای تغییر باشه، خطا بده و بره بیرون. این ویژگی باعث میشه بتونیم بلک‌ رو به ابزارهای CI به راحتی وصل کنیم.

اگر هم نیاز دارید که اول ببینید بلک قرار هست با فایل ورودی چیکار کنه، می‌تونید به صورت پایین ازش استفاده کنید:

بلک خیلی به راحتی می‌تونه به Editorهای مختلف وصل بشه و تقریبا داکیومنت جامعی برای این کار داره و یه خبر خوب دیگه این هست که یک magic command هم هست که باعث میشه بتونیم تویJupyter Notebook هم ازش بتونیم استفاده کنیم.

جمع‌بندی

بلک ممکن هست یکم با چیزی که توی ذهن‌ ما راجعبه استاندارد بودن کد‌استایل داریم متفاوت باشه؛ اما روی هم رفته صرف نظر کردن از چند مورد مخالفت ساده، ارزش رسیدن به یک چیز جامع رو داره!

اما بلک تا حدودی قابل کانفیگ هم هست، فقط باید یادمون نره که هدف بلک این هست که به یک فرمت جامع بین افراد مختلف برسیم پس انتظار چیزه خیلی پیچیده‌ای از این configuration نباید داشت. در پایان، کد استایلِ کد مهم هست، اما کاری است زمان‌بر، پس تا بلک هست بذاریم اون انجامش بده!

از اینجا کجا بریم

  • اگر به دنبال مقایسه بلک با ابزارهای مشابه هستید

https://medium.com/3yourmind/auto-formatters-for-python-8925065f9505

https://news.ycombinator.com/item?id=17155048



pythoncode stylepep8black
Pythonista, Free Software Enthusiast. GNU/Linux Master. Network Security Researcher. Son. Brother.
شاید از این پست‌ها خوشتان بیاید