رفتن به محتوای اصلی
برنامه‌سازی پیشرفته با پایتون درس‌نامهٔ آزاد
درس پیشرفته ۳۰ دقیقه

بازآرایی، کد تمیز و الگوهای طراحی

استدلال پشت بازآرایی: بوی کد، استخراج و جابه‌جایی، ساده‌سازی و الگوهای کاربردی با جایگزین پایتونیک.

هدف این درس

بتوانی بوی کد را تشخیص دهی، بازآرایی کوچک امن انجام دهی و الگوی مناسب را انتخاب کنی.

در این مطلب ۳

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

بوی کد: نشانه‌ها، نه احکام

  • تکرار: یک منطق در سه جا کپی شده → استخراج تابع.
  • تابع طولانی: چند کار قاطی → شکستن به قدم‌ها.
  • شرط تودرتوی عمیق: → نگهبان (early return) و استخراج شرط.
  • کلاس خدا: همه‌چیز می‌داند → تقسیم مسئولیت.
# قبل: شرط تودرتو
def price(user, cart):
    if user is not None:
        if user.active:
            if cart:
                if user.coupon:
                    return cart.total * 0.8
                return cart.total
    return 0

# بعد: نگهبان + استخراج
def price(user, cart):
    if not (user and user.active and cart):
        return 0
    if user.coupon:
        return cart.total * 0.8
    return cart.total

استخراج متد و جابه‌جایی

قانون: هر بازآرایی کوچک، بعدش تست‌ها سبز. قدم‌های بزرگِ «همه‌چیز را بازنویسی می‌کنم» بدون تورِ تست، اسمش بازآرایی نیست، قمار است.

الگوها: ابزار، نه مد

Strategy (راهبرد): خانواده‌ای از الگوریتم‌های قابل تعویض — در پایتون معمولاً فقط یک دیکشنریِ نام → تابع است، نه سلسله‌مراتب کلاس جاوایی:

def normal_price(amount): return amount
def student_price(amount): return amount * 0.7
def vip_price(amount): return amount * 0.85

STRATEGIES = {"normal": normal_price, "student": student_price, "vip": vip_price}

def checkout(kind, amount):
    return STRATEGIES[kind](amount)

Observer (ناظر): «وقتی X شد، همهٔ علاقه‌مندان باخبر شوند» — در پایتون با لیست callback:

class Store:
    def __init__(self):
        self._listeners = []

    def subscribe(self, callback):
        self._listeners.append(callback)

    def sell(self, item):
        for callback in self._listeners:
            callback(item)

Singleton: در پایتون تقریباً همیشه اشتباه است؛ به‌جایش از «یک نمونهٔ ماژول‌سطح» یا تزریق وابستگی استفاده کن. الگویی که در جاوا لازم بود، در پایتون با یک دیکشنری یا تابع حل می‌شود — آن را تحمیل نکن.

Facade (نما): یک تابعِ ساده روی زیرسیستمِ پیچیده. MVC: جداکردن داده (Model) از نما (View) و کنترل — همان انضباطی که در درس GUI با «جدایی منطق از نما» می‌بینی.

سنجش فهم — بازآرایی و الگو

۰ از ۲ پاسخ داده شده

  1. تعریف درست بازآرایی چیست؟
  2. پیاده‌سازی پایتونیک Strategy معمولاً چیست؟

اول به همهٔ پرسش‌ها پاسخ دهید، بعد بررسی کنید.

مطالب مرتبط

از همین بخش و با برچسب‌های مشترک

این مطلب را خواندید؟ آن را علامت بزنید تا پیشرفت شما روی همین دستگاه ذخیره شود.

وضعیت پیشرفت برای بازآرایی، کد تمیز و الگوهای طراحی