مقدمه: بازسازی کد
بازسازی کد یا refactoring، یک واژهی تخصصی است که معنی آن، بهبود کیفیت کد یک سیستم است بدون آن که تغییری در رفتار خارجی آن ایجاد شود. مشابه غیرافزاری بازسازی کد، بازسازی داخلی یک خانه است که بدون آن نمای خارجی خانه دچار تغییر شود، اجزای داخلی آن مانند تاسیسات و چیدمان وسایل تغییر میکنند.
حالا اگر بهبود کیفیت کد منجر به خطاهای جدید یا تغییرات در رفتار سیستم گردد، آیا چنین کاری، بهبود یا بازسازی کد است؟ مسلما خیر! پاسخ این پرسش از این بابت اهمیت دارد که هر تغییری در کد، بازسازی محسوب نمیشود ولی بازسازی حتما با تغییر کد همراه است: هر گردی گردو نیست!
در بازسازی کد، بهترین رویکرد، اعمال تغییرات هدفمند و کوچک است. برعکس رویکرد ایجاد تغییرات بزرگ و گسترده، بازسازی کد اقدامی درازمدت و پیوسته است (آهسته و پیوسته). دلیل چنین رویکردی این است که اعمال یکبارهی تغییرات بزرگ و گسترده، موجب ریسک بیشتر و نیازمند زمان طولانیتری است.
رهرو آن نیست
که گه تند و گهی خسته رود
رهرو آن اسـت که آهستـــــه و پیـــوسته رود
بدیهی است که یکی از مزایای بازسازی کد این است که وقت گذاشتن پیشاپیش و تدریجی برای افزایش کیفیت کد باعث افزایش سرعت تیم در آینده میشود.
پرسش:
به تازگی، نمونهی آموزنده و جالبی از بازسازی کد خواندم که در اینجا با شما در میان میگذارم. ابتدا صورت پرسش را مطرح میکنم تا آن را بررسی نمایید.
آیا پیشنهادی برای بازسازی کد زیر دارید؟ قبل از ارائه پیشنهاد، چه پرسشهایی برای شما مطرح است؟ لطفا با پاسخهای پیشفرض خود، کد زیر را بازنویسی نمایید و اگر دوست داشتید آن را اینجا به اشتراک بگذارید.
if(user.role === "admin" && user.isActive && user.permissions.some(p => p === "edit")) {
// Do stuff
}
حرف زدن که هزینه نداره، کدت رو نشون بده! 🙂
برایان کرنیگان
پ.ن.
شاید ترجمه بهتر این باشد: حرف زدن که مالیات نداره، کدت رو نشون بده!
شهرت برایان کرنیگان در کنار دنیس ریچی به دلیل کتاب معروف برنامهنویسی C است.
منبع کد: کتاب Refactoring TypeScript نوشتهی James Hickey
محسن
۲۰ تیر ۱۴۰۰ در ۱۸:۲۵سلام وقت شما بخیر.
&& 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//}