کدنویسی تمیز چیست و چرا مهمه؟
خیلی ساده بخوام بگم، کدنویسی تمیز یعنی نوشتن کدی که مثل یه داستان قابل فهم باشه، کدهایی که وقتی خودت یا کسی دیگه شش ماه بعد بهش نگاه کرد، سریع متوجه بشه که چی کار میکنه. هدف اصلی اینه که نگهداری، توسعه و تغییرات در کد سادهتر بشه. خب، چرا اینقدر مهمه؟ فکر کن داری توی یه تیم کار میکنی و یه نفر دیگه کدی که نوشتی رو میخواد بخونه. اگه کدت مثل یک کتاب درسی پیچیده و غیرقابل فهم باشه، اون شخص احتمالاً به خطخطی کردن کد تو فکر میکنه! ولی اگه کدت تمیز و قابل فهم باشه، همون آدم ممکنه بیاد ازت تشکر هم بکنه!ویژگیهای کدنویسی تمیز در پایتون
خب، حالا که میدونی چرا کدنویسی تمیز مهمه، بریم سراغ چند ویژگی که بهت کمک میکنن کدت تمیزتر بشه:- نامگذاری مناسب: یه حقیقت ساده: اسمها مهم هستن! به جای استفاده از متغیرهایی مثل
xیاtemp123، از نامهایی مثلemployee_nameاستفاده کن. مطمئن باش این کار از سردرد بعدی جلوگیری میکنه! - کوچک نگه داشتن توابع: اگه تابعی داری که به اندازه یک رمان طولانی شده، احتمالش زیاده که داری چیزی رو اشتباه انجام میدی. توابع رو کوچک و با یک مسئولیت مشخص نگه دار.
- کامنتهای شفاف، اما به اندازه: بله، کامنتها خوبن ولی نباید خیلی زیاد باشن. کدت باید خودش گویا باشه، نه اینکه هر خطش رو توضیح بدی. اگه نیاز به کامنت گذاشتن داری، احتمالاً اسامی و ساختار کدت درست نیست.
- یک مسئولیت برای هر کلاس: یک کلاس نباید همه کاره باشه. این یعنی اگه یک کلاس رو داری که هم احراز هویت میکنه، هم ایمیل ارسال میکنه و هم سفارشها رو مدیریت میکنه، بهتره بشینی و دوباره بهش فکر کنی.
مثال کاربردی از کدنویسی تمیز در پایتون
بیایید یه مثال کاربردی از کدنویسی تمیز در پایتون رو ببینیم. فرض کن یک برنامه داریم که اطلاعات کارمندان رو مدیریت میکنه. این کد بدیهی و سریع، ولی غیرتمیز رو ببین:
def process_employees(e):
for emp in e:
if emp['type'] == 'fulltime':
print(f"{emp['name']} earns {emp['salary']} annually.")
elif emp['type'] == 'contractor':
print(f"{emp['name']} earns {emp['hourly_rate']} per hour.")
چه مشکلی اینجا داریم؟ اولاً، e یعنی چی؟ بعدش، این کد مقیاسپذیری نداره؛ اضافه کردن نوع جدیدی از کارمند کلی زحمت میخواد. حالا بیایید همین کد رو به روشی تمیزتر بنویسیم:
class Employee:
def __init__(self, name):
self.name = name
def get_payment_info(self):
pass
class FullTimeEmployee(Employee):
def __init__(self, name, salary):
super().__init__(name)
self.salary = salary
def get_payment_info(self):
return f"{self.name} earns {self.salary} annually."
class Contractor(Employee):
def __init__(self, name, hourly_rate):
super().__init__(name)
self.hourly_rate = hourly_rate
def get_payment_info(self):
return f"{self.name} earns {self.hourly_rate} per hour."
def process_employees(employees):
for emp in employees:
print(emp.get_payment_info())
employees = [
FullTimeEmployee("Alice", 50000),
Contractor("Bob", 50)
]
process_employees(employees)
حالا نگاه کن چقدر همه چیز مرتب و زیبا شده. اضافه کردن یک نوع کارمند جدید مثل آب خوردن میشه و دیگه نیازی به تغییرات زیاد در کد اصلی نیست.
اصول SOLID: راهنمای طلایی کدنویسی تمیز
علاوه بر این که باید کدها رو تمیز بنویسیم، اصول SOLID به ما کمک میکنه که کدهایی بنویسیم که مقیاسپذیر، قابل توسعه و خوانا باشن. این پنج اصل مثل یک جعبه ابزار برای ساخت کدهای تمیز عمل میکنن.
Single Responsibility (SRP) : هر کلاس باید فقط یک کار انجام بده. این اصل ساده به نظر میاد، ولی نجاتدهنده است.
اصل Open-Close (OCP) : کلاسها باید برای توسعه باز باشن، ولی برای تغییر بسته. یعنی بتونی ویژگی جدیدی به کدت اضافه کنی، بدون اینکه ساختار قبلی رو خراب کنی.
اصل جایگزینی لیسکوف (LSP): اگر یک کلاس فرزند جایگزین کلاس والدش بشه، برنامه نباید بهم بریزه. این یعنی کلاسهای فرزند باید بتونن تمام رفتارهای کلاس والد رو داشته باشن.
اصل جداسازی رابط (ISP): به جای ساختن یک رابط بزرگ، چندین رابط کوچک و خاص ایجاد کن.
اصل وارونگی وابستگی (DIP): کلاسهای سطح بالا نباید به جزئیات سطح پایین وابسته باشن. به جای وابستگی به کلاسهای خاص، به انتزاعها وابسته باش.
جمعبندی
کدنویسی تمیز در پایتون چیزی نیست که بشه نادیدهاش گرفت. با رعایت اصولی مثل SOLID و تکنیکهای سادهای مثل انتخاب نامهای مناسب و نگه داشتن توابع کوچک، میتونی کدهایی بنویسی که نه تنها خودت، بلکه همتیمیهات هم عاشقش بشن.
حالا که با اصول اولیه آشنا شدی، دفعه بعدی که میخوای کدی بنویسی، این نکات رو به یاد بیار و مطمئن باش که تفاوت بزرگی در کیفیت کدت حس میکنی.

