مقدمه
پیش از این راجع به Bad Smell صحبت کردیم "تابع طولانی" یکی از 22 نوع Bad Smell میباشد.
نحوه تشخیص و معرفی راه حل تابع طولانی
برنامه هایی که عمر بیشتر و بهتری دارند برنامه هایی هستند که از توابع کوتاه تشکیل شده اند. برنامه نویس هایی که تازه کار با اشیا را شروع کردند اینطور فکر میکنند که هیچ پیچیدگی ای از پایان ناپذیر بودن توابع و دستورات در یکجا به وجود نمی آید. اگر شما چند سال تجربه برنامه نویسی با همچنین برنامه هایی را داشته باشید متوجه میشوید که متد های کوچک چقدر ارزشمند هستند. تمامی معیار ها با توابع کوتاه مطابقت دارند
از اولین روز های برنامه نویسی آشکار بود که با طولانی شدن یک تابع، فهمیدن تابع سخت تر خواهد شد. زبان های برنامه نویسی اولیه سربار قابل توجه ای در فراخوانی زیرروال ها داشتند که برنامه نویسان را از استفاده از توابع کوتاه دور میکرد زبان های شی گرای جدید برای فراخوانی های زیرروال این سربار را تا حد امکان کاهش داده اند. اما هنوز یک سربار برای خواننده کد وجود دارد چون میبایست بین خطوط منتقل شود تا ببیند که زیررویه ها چه کاری انجام میدهند. محیط های توسعه ای که به شما اجازه دیدن دو تابع همزمان را می دهند این مشکل را برطرف میکنند. اما کلید اصلی درک متد های کوتاه نام گذاری مناسب می باشد که اگر نام گذاری یک متد مناسب باشد شما نیاز به چک کردن بدنه متد ندارید.
مسئله ای که بیشتر باعث عصبانیت برنامه نویسان در حین تجزیه توابع میشود یک فرآیند اکتشافی[1] است که هر زمان که نیاز به نوشتن توضیح[2] در کد داشتیم بجای توضیح یک تابع می نویسیم. این تابع شامل کد توضیح داده شده است اما نامگذاری اش بجای نحوه انجام کار، هدف تابع را مشخص میکند. ممکن است اینکار بر روی تعدادی کمی خط حتی برای یک خط کد انجام شود. اینکار حتی وقتی صدا زدن متد از نوشتن کد طولانی تر است هم به صرفه می باشد. کلید اصلی اینجا طول متد نیست بلکه میخواهیم یک فاصله منطقی بین هدف تابع با نحوه انجام کار توسط تابع ایجاد کنیم.
اگر یک تابع با تعداد زیادی پارامتر و متغیر های موقت دارید می بایست این مشکل را نیز با استخراج تابع حل کنید که معمولا دوباره میبایست تعداد زیادی پارامتر و متغیر های موقت را به توابع استخراج شده بفرستید که به ندرت باعث خوانایی بیشتر کد میشود. شما میتوانید از روش جایگزینی متغیر های موقت با دستور[3] استفاده کنید. یا اینکه از روش های معرفی شی پارامتر[4] و حفظ کردن تمامیت شی[5] استفاده کنید.
اگر موارد بالا را رعایت کردید و باز هم تعداد زیادی متغیر موقت و پارامتر دارید زمانش فرا رسیده که یک کار اساسی که جایگزینی متد با شی متد[6] است انجام دهید.
چطور میبایست تکه کد های قابل استخراج را تشخیص دهیم؟ یک روش خوب نگاه کردن به توضیحات است. معمولا نشان دهنده فاصله معنایی هستند. یک تکه کد با یک توضیح که به شما میگوید چه کاری در حال انجام است میتواند با یک تابع که اسمش بر اساس هدف انجام نام گذاری شده است جایگزین شود. حتی یک خط کد نیز اگر نیازمند توضیح است برای استخراج مناسب است.
شرط ها و حلقه ها نیز نشانه های استخراج هستند از روش تجزیه شرط[7] برای عبارات شرطی استفاده کنید و برای حلقه ها میتوانید حلقه و کد درون حلقه را به یک تابع جدید منتقل کنید.
[1] Heuristic
[2] Comment
[3] Replace Temp with Query
[4] Introduce Parameter Object
[5] Preserve Whole Object
[6] Replace Method with Method Object
[7] Decompose Conditional
پیش از این راجع به Bad Smell صحبت کردیم "تابع طولانی" یکی از 22 نوع Bad Smell میباشد.
نحوه تشخیص و معرفی راه حل تابع طولانی
برنامه هایی که عمر بیشتر و بهتری دارند برنامه هایی هستند که از توابع کوتاه تشکیل شده اند. برنامه نویس هایی که تازه کار با اشیا را شروع کردند اینطور فکر میکنند که هیچ پیچیدگی ای از پایان ناپذیر بودن توابع و دستورات در یکجا به وجود نمی آید. اگر شما چند سال تجربه برنامه نویسی با همچنین برنامه هایی را داشته باشید متوجه میشوید که متد های کوچک چقدر ارزشمند هستند. تمامی معیار ها با توابع کوتاه مطابقت دارند
از اولین روز های برنامه نویسی آشکار بود که با طولانی شدن یک تابع، فهمیدن تابع سخت تر خواهد شد. زبان های برنامه نویسی اولیه سربار قابل توجه ای در فراخوانی زیرروال ها داشتند که برنامه نویسان را از استفاده از توابع کوتاه دور میکرد زبان های شی گرای جدید برای فراخوانی های زیرروال این سربار را تا حد امکان کاهش داده اند. اما هنوز یک سربار برای خواننده کد وجود دارد چون میبایست بین خطوط منتقل شود تا ببیند که زیررویه ها چه کاری انجام میدهند. محیط های توسعه ای که به شما اجازه دیدن دو تابع همزمان را می دهند این مشکل را برطرف میکنند. اما کلید اصلی درک متد های کوتاه نام گذاری مناسب می باشد که اگر نام گذاری یک متد مناسب باشد شما نیاز به چک کردن بدنه متد ندارید.
مسئله ای که بیشتر باعث عصبانیت برنامه نویسان در حین تجزیه توابع میشود یک فرآیند اکتشافی[1] است که هر زمان که نیاز به نوشتن توضیح[2] در کد داشتیم بجای توضیح یک تابع می نویسیم. این تابع شامل کد توضیح داده شده است اما نامگذاری اش بجای نحوه انجام کار، هدف تابع را مشخص میکند. ممکن است اینکار بر روی تعدادی کمی خط حتی برای یک خط کد انجام شود. اینکار حتی وقتی صدا زدن متد از نوشتن کد طولانی تر است هم به صرفه می باشد. کلید اصلی اینجا طول متد نیست بلکه میخواهیم یک فاصله منطقی بین هدف تابع با نحوه انجام کار توسط تابع ایجاد کنیم.
اگر یک تابع با تعداد زیادی پارامتر و متغیر های موقت دارید می بایست این مشکل را نیز با استخراج تابع حل کنید که معمولا دوباره میبایست تعداد زیادی پارامتر و متغیر های موقت را به توابع استخراج شده بفرستید که به ندرت باعث خوانایی بیشتر کد میشود. شما میتوانید از روش جایگزینی متغیر های موقت با دستور[3] استفاده کنید. یا اینکه از روش های معرفی شی پارامتر[4] و حفظ کردن تمامیت شی[5] استفاده کنید.
اگر موارد بالا را رعایت کردید و باز هم تعداد زیادی متغیر موقت و پارامتر دارید زمانش فرا رسیده که یک کار اساسی که جایگزینی متد با شی متد[6] است انجام دهید.
چطور میبایست تکه کد های قابل استخراج را تشخیص دهیم؟ یک روش خوب نگاه کردن به توضیحات است. معمولا نشان دهنده فاصله معنایی هستند. یک تکه کد با یک توضیح که به شما میگوید چه کاری در حال انجام است میتواند با یک تابع که اسمش بر اساس هدف انجام نام گذاری شده است جایگزین شود. حتی یک خط کد نیز اگر نیازمند توضیح است برای استخراج مناسب است.
شرط ها و حلقه ها نیز نشانه های استخراج هستند از روش تجزیه شرط[7] برای عبارات شرطی استفاده کنید و برای حلقه ها میتوانید حلقه و کد درون حلقه را به یک تابع جدید منتقل کنید.
[1] Heuristic
[2] Comment
[3] Replace Temp with Query
[4] Introduce Parameter Object
[5] Preserve Whole Object
[6] Replace Method with Method Object
[7] Decompose Conditional