refactor کردن کد چیست

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

به عبارت دیگر، در ریفکتورینگ ما به جای تغییر کاری که کد انجام می‌دهد، سعی می‌کنیم نحوه‌ی نوشتن آن را بهبود دهیم. این کار شامل مرتب کردن کد، حذف کدهای اضافی، بهینه‌سازی نام‌گذاری متغیرها و توابع و همچنین تقسیم کد به بخش‌های کوچکتر و قابل‌استفاده مجدد است.

مزایای این کار شامل افزایش خوانایی، کاهش احتمال بروز خطا، و راحت‌تر کردن نگهداری و توسعه‌ی کد در آینده است.
چرا ریفکتورینگ مهم است؟

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

اهداف ریفکتور کردن کد

ریفکتورینگ کد چند هدف اصلی دارد:

  1. خوانایی (Readability): هدف این است که کد را ساده‌تر و روان‌تر کنیم تا هر کسی که روی پروژه کار می‌کند، آن را راحت‌تر بفهمد. کدی که به خوبی نام‌گذاری و ساختاربندی شده، خواناتر است و درک و کار با آن آسان‌تر است.
  2. حفظ‌پذیری (Maintainability): کد تمیز و منظم به برنامه‌نویسان این امکان را می‌دهد که تغییرات یا اصلاحات جدید را به راحتی اعمال کنند. این موضوع در پروژه‌های بزرگ و چند نفره اهمیت زیادی دارد.
  3. کاهش پیچیدگی (Reducing Complexity): با تقسیم کد به بخش‌های کوچکتر، حذف موارد تکراری و ساده‌سازی منطق‌ها، کد پیچیدگی کمتری پیدا می‌کند و خطاهای احتمالی نیز کاهش می‌یابند.
  4. افزایش کارایی (Performance): هرچند ریفکتورینگ معمولاً به بهبود عملکرد نمی‌پردازد، گاهی بهینه‌سازی‌ها در این فرآیند منجر به کاهش منابع موردنیاز و بهبود سرعت اجرا می‌شوند.

ریفکتورینگ شامل چه تغییراتی است؟

در ریفکتورینگ، تغییرات زیادی ممکن است اتفاق بیافتد. برخی از رایج‌ترین موارد به شرح زیر است:

  • بهبود نام‌گذاری: نام‌های بهتر برای متغیرها، توابع و کلاس‌ها انتخاب می‌شود تا معنی آنها واضح‌تر شود.
  • تقسیم توابع بزرگ: یک تابع بزرگ و پیچیده ممکن است به چند تابع کوچکتر تقسیم شود، که هر کدام وظیفه‌ای مشخص و ساده را انجام می‌دهند.
  • حذف کدهای اضافی یا تکراری: کدهایی که چندین بار تکرار شده‌اند در قالب تابع یا کلاس‌هایی استخراج می‌شوند تا از تکرار کد جلوگیری شود.
  • جایگزینی شرط‌های پیچیده با ساختارهای ساده‌تر: شرایط پیچیده و طولانی می‌توانند با ساده‌سازی منطقی و استفاده از توابع جایگزین شوند.
  • استفاده از الگوهای طراحی (Design Patterns): الگوهای طراحی ساختارهای استانداردی هستند که به حل مسائل رایج در کدنویسی کمک می‌کنند. به‌کارگیری این الگوها می‌تواند کد را مرتب‌تر و حرفه‌ای‌تر کند.

چه زمانی باید ریفکتور کنیم؟

ریفکتورینگ بهتر است به صورت منظم انجام شود. هر زمان که تغییر یا ویژگی جدیدی به کد اضافه می‌کنید یا کدی را رفع مشکل می‌کنید، کمی زمان برای بهبود ساختار و خوانایی آن صرف کنید. به این کار اصطلاحاً "ریفکتورینگ مستمر" می‌گویند.

مثال ساده از ریفکتورینگ

فرض کنید کدی دارید که مساحت یک مستطیل را محاسبه می‌کند، ولی به دلیل نام‌گذاری‌ها و ساختار نامناسب، فهم آن سخت است.

کد اولیه:

a = 10
b = 20
area = a * b
print(&quotThe area is&quot, area)

این کد را می‌توان به صورت زیر ریفکتور کرد:

def calculate_rectangle_area(width, height):
    return width * height

width = 10
height = 20
area = calculate_rectangle_area(width, height)
print(&quotThe area is&quot, area)

در این نسخه، کد خواناتر و مفهوم‌تر شده و اگر نیاز به استفاده‌ی مجدد از این تابع باشد، به راحتی می‌توان آن را فراخوانی کرد.

ریفکتور کردن به معنای بهبود ساختار کد بدون تغییر در عملکرد آن است. این کار باعث می‌شود کد نگهداری و فهم آسان‌تری داشته باشد و برنامه‌نویسان دیگر نیز بتوانند بهتر با آن کار کنند.