نمونه آموزنده‌ای از بازسازی کد

  • یوسف مهرداد

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

در بازسازی کد، بهترین رویکرد، اعمال تغییرات هدفمند و کوچک است. برعکس رویکرد ایجاد تغییرات بزرگ و گسترده، بازسازی کد اقدامی درازمدت و پیوسته است (آهسته و پیوسته). دلیل چنین رویکردی این است که اعمال یک‌باره‌ی تغییرات بزرگ و گسترده، موجب ریسک بیشتر و نیازمند زمان طولانی‌تری است.
رهرو آن نیست
که گه تند و گهی خسته رود
رهرو آن اسـت که آهستـــــه و پیـــوسته رود

بدیهی است که یکی از مزایای بازسازی کد این است که وقت گذاشتن پیشاپیش و تدریجی برای افزایش کیفیت کد باعث افزایش سرعت تیم در آینده می‌شود.

پرسش:
به تازگی، نمونه‌ی آموزنده و جالبی از بازسازی کد خواندم که در اینجا با شما در میان می‌گذارم. ابتدا صورت پرسش را مطرح می‌کنم تا آن را بررسی نمایید.
آیا پیشنهادی برای بازسازی کد زیر دارید؟ قبل از ارائه پیشنهاد، چه پرسش‌هایی برای شما مطرح است؟ لطفا با پاسخ‌های پیش‌فرض خود، کد زیر را بازنویسی نمایید و اگر دوست داشتید آن را اینجا به اشتراک بگذارید.

if(user.role === "admin" && user.isActive && user.permissions.some(p => p === "edit")) {
// Do stuff
}
گزیده:
حرف زدن که هزینه نداره، کدت رو نشون بده! 🙂
برایان کرنیگان

پ.ن.
شاید ترجمه بهتر این باشد: حرف زدن که مالیات نداره، کدت رو نشون بده!
شهرت برایان کرنیگان در کنار دنیس ریچی به دلیل کتاب معروف برنامه‌نویسی C است.
منبع کد: کتاب Refactoring TypeScript نوشته‌ی James Hickey

https://bibalan.com/?p=3606
یوسف مهرداد

یوسف مهرداد


کانال تلگرام

نظرات (2)

wave
  • محسن

    ۲۰ تیر ۱۴۰۰ در ۱۸:۲۵

    سلام وقت شما بخیر.

    && var isActiveAdminCanEdit = isActiveAdminUser(user)
    canEdit(user)
    if(isActiveAdminCanEdit)
    {dostuff}

    پاسخ
  • Sina

    ۲۵ تیر ۱۴۰۰ در ۱۳:۲۳

    ;’const isAdmin = (user) => user.role === ‘admin
    ;const isActive = (user) => user.isActive
    const hasPermission = (user , action) => user.permissions.some(p=> p === action)
    if(isAdmin(user) && isActive(user) && hasPermission(user , ‘edit’))
    {Do Stuff//}

    پاسخ

پاسخ دادن به Sina لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

برای خروج از جستجو کلید ESC را بفشارید