سینا ابراهیمی
سینا ابراهیمی
خواندن ۴ دقیقه·۳ سال پیش

کُدهات رو سیاه کن! فُرمت کدهای پایتون

مدت زیادی بود که به صورت فریلنسری کار میکردم و به طبع تنهایی روی هر پروژه کار میکردم. روزی رسید که قرار شد با یه نفر دیگه، همزمان روی یه پروژه کار کنیم - البته دو قسمت جدا از پروژه که به هم ربط داشتن - و مشکلی که داشتم توی فُرمت کردن کد ها بود.

من به یه شکل کد هام رو فُرمت میکردم، اون رفیقمون هم به یه شکل! و از اونجایی که این فرمت کردن به صورت خودکار توسط ادیتور انجام میشد - و از فُرمترهای متفاوتی استفاده میکردیم - هربار که فایل سیو میشد فُرمت کدها تغییر میکرد و به یه شکل متفاوتی نشون داده میشد، همین باعث ایجاد یه سری مشکلات میشد. اینجا بود که تصمیم گرفتم یه فکری به حالش بکنم.

نمیدونم کُدهای من گیج‌کننده‌ان یا همکارام دائم گیج‌ان :)
نمیدونم کُدهای من گیج‌کننده‌ان یا همکارام دائم گیج‌ان :)

اگه نمیدونید فرمت کردن و فُرمتر کد چیه نگران نباشید، میگم بهتون.

توی پایتون - و تقریباً همه زبان ها - یه سری استاندارد وجود دارن که باید کدهامون رو طبق اونا بنویسیم، این استانداردها که بهشون «Style Guide» میگن توی اجرای کد تاثیری ندارن ولی به خوانایی، مرتب و واضح بودن و در کل ظاهر کد کمک‌ زیادی میکنن. توی پایتون به این استانداردها PEP8 میگن.

فُرمترِ کد ابزاریه که میاد بر اساس اون قواعد و استانداردها، شیوه قرار گرفتن کدهاتون در فایل رو مشخص میکنه. مطمئن میشه که تمام کدهاتون، به یه شکل چیده شده‌ان و به اصطلاح یکپارچه‌اند.

حالا چند تا مثال از این استانداردها میزنم:

  1. اینکه هر خط به تعداد کاراکتر مشخصی طولانی باشه.
  2. مثلا بین تعریف هر تابع یا کلاس که توی تابع یا کلاس دیگری قرار نداره، دو خط خالی باشه.

۳. برای هر مرحله ایندنت کردن، ۴ اسپیس استفاده بشه.

۴. انکدینگ فایلمون UTF-8 باشه.

۵. ایمپورت‌ها باید توی خط‌های جدا باشن، و همیشه اول فایل قرار بگیرن.

۶. ایمپورت‌ها باید به ترتیب زیر قرار بگیرن:

  • ۱. کتابخونه‌های استاندارد پایتون.
  • ۲. کتابخونه‌های غیراستاندارد.
  • ۳. ایمپورت‌های مربوط به برنامه‌ای که داریم مینویسیم.



اینا فقط مثال‌های کوچیکی از PEP8 بود. میتونید از این لینک بیشتر مطالعه کنید.


فرمترهای زیادی - برای همه زبان‌ها - مخصوصا پایتون - وجود دارن، ولی توی این پست میخوام به Black بپردازم، که کار دستِ یکی از برنامه نویس‌های خود پایتونه!


«کُد بیشتر از اینکه نوشته بشه، خونده میشه» فکر میکنم این نقل قول از عمو باب - رابرت سی مارتین - باشه، که یکی از آدمای مطرح دنیای برنامه نویسیه و شایدم اسمش رو شنیده باشید.

همونقدر که نوع کد نویسی و خوانایی اون هنگام نوشتن (منظور پیچیدگی دستورات و ...) مهمه، فُرمت کردن اون، یعنی مرتب کردنش و چینش اون در فایل به شکلی که به راحتی قابل خوندن باشه هم مهمه!

حالا چرا Black؟

بهتره کُد رو دستی فُرمت نکنی!
بهتره کُد رو دستی فُرمت نکنی!

حالا چرا بین اینهمه فُرمتر Black رو انتخاب کردم؟

یکی از خوبی‌های این فُرمتر - که از فُرمترهایی مثل gofmt برای گولنگ و Prettier برای جاوا اسکریپت الهام گرفته - اینه که به جای شما فکر میکنه!

شما نیازی نیست درباره نوع چینش کدهاتون فکر یا برنامه‌ریزی کنید. میتونید مستقیم کدتون رو فُرمت کنید و قهوه‌تون رو بزنید بر بدن و به کار ادامه بدین.

بلک یه فُرمتر غیرقابل انعطافه! با استفاده از اون شما کنترل رو به دستش میدید، در عوض سرعت شما رو بالا میبره و از فکر کردن در باره این مسائل بی‌نیازتون میکنه! در نتیجه میتونید انرژی ذهنی و فیزیکتون رو برای چیزهای مهم تری بذارید.

همین قابلیت کمش در تنظیم‌پذیری (configurability) باعث میشه کد‌ها کمترین تفاوت رو داشته باشن و هنگامی که چند نفر روی یک کد کار میکنن، از نصف سردردهاتون جلوگیری میکنه.


یه نگاهی به کد زیر بندازید:

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

واکنش من، وقتی کد بالا رو میبینم :|
واکنش من، وقتی کد بالا رو میبینم :|

حالا کد پایین، نتیجه خوروندن همون کد بالا به blackئه:

اگه دوست دارید بیشتر باهاش وَر برید، پیشنهاد میکنم به اینجا یه سری بزنید:

https://black.vercel.app/


برای نصب روی سیستمتون فقط کافیه دستور زیر رو اجرا کنید:

pip install black

نحوه استفاده ازش هم که آسونه:

black {source_file_or_directory}

یا اگه دستور بالا کار نکرد:

python -m black {source_file_or_directory}


یا کار بهتری که میتونید انجام بدید، اینه که روی ادیتورتون نصبش کنید تا موقع زخیره کردن فایل، به صورت خودکار براتون کُد رو فُرمت کنه. اینجا نحوه این کار برای VsCode رو نشون میدم:

کافیه به تنظیمات برید و format on save رو جستجو کنید و فعالش کنید:

حالا برای استفاده از black، دوباره python format provider رو جستجو کنید و روی black قرارش بدید:

داکیومنت این پروژه، اگه دوست دارید بیشتر درموردش مطالعه کنید:

https://black.readthedocs.io/en/stable/usage_and_configuration/index.html


پایتونpythonblackفرمت
دانشجوی کامپیوتر، برنامه نویس پایتون، توسعه دهنده وب و علاقه مند به نوشتن...
شاید از این پست‌ها خوشتان بیاید