خب همونطور که میدونی، بهتره که اول اینو بخونی :)
و اما ادامه داستان:
توابع
توابع باید یک کار انجام دهند
این مهم ترین قانون در مهندسی نرم افزار هست.
وقتی توابع بیش از یک کار انجام میدن، نوشتن، تست کردن و استدلال اونا سخت تر میشه. زمانی که میتونید یک تابع رو به یک عمل ایزوله کنید، میتونید به راحتی اونا رو بازسازی (refactor) کنید و البته، کد شما خوانا تر میشه. اگر فقط همین یک مورد رو از بین تمامی موارد گفته شده رعایت کنید، از بسیاری از توسعه دهنده ها جلوتر خواهید بود!
این شکلی بده:
خوب:
میبینید؟ الان وقت استفاده از Generator هاست!
این شکلی بهتره:
نام توابع باید نشان دهند که چه کاری انجام میدهند
بد:
خوب:
توابع باید فقط یک سطح از انتزاع داشته باشند
وقتی بیش از یک سطح از انتزاع (abstraction) دارید، توابع شما دارن بیشتر از یک کار رو انجام میدن! تقسیم توابع منجر به قابلیت استفاده مجدد (re-usability) و تست آسون تر میشه.
بد:
خوب:
از فلگ ها به عنوان پارامترهای تابع استفاده نکنید
فلگ ها نشون دهنده این هستن که این تابع بیشتر از یک کار انجام میده. توابع باید یک کار انجام دهند. اگر توابع شما بر اساس یک مقدار بولین (boolean) مسیر های متفاوتی رو دنبال میکنن، بهتره اونا رو تکه تکه کنید.
دیس ایز بد:
خوب:
از اثرات جانبی خودداری کنید!
یک تابع زمانی اثر جانبی داره که کاری بجز گرفتن یک مقدار و برگرداندن مقدار یا مقادیر دیگه انجام بده. به طور مثال، یک اثر جانبی میتونه نوشتن روی یک فایل، تغییر برخی متغیر های global یا به طور تصادفی، انتقال همهی اموالتون به یک غریبه باشه!
ولی خب، گاهی هم نیاز هست که برنامهتون اثرات جانبی داشته باشه. برای مثال، شبیه مثال قبلی ممکنه نیاز داشته باشید که روی یک فایل بنویسید. در این موارد باید حواستون رو جمع کنید و مشخص کنید که کجا این اثر جانبی رو لحاظ کردید. چندین تابع و کلاس برای نوشتن روی یک فایل خاص نداشته باشید! بلکه فقط یک (و فقط یک) سرویس داشته باشید که این کار رو انجام میده.
نکته اصلی اینه که از دام های رایج مثل تبادل وضعیت بین چندین شئ بدون هیچ ساختاری، استفاده از نوع داده های قابل تغییر که توسط هر چیزی قابل نوشتن هست، یا استفاده از یک نمونهی کلاس و متمرکز نکردن محل بروز اثرات جانبی اجتناب کنید. اگر بتونید این کارو انجام بدید، از اکثریت قریب به اتفاق برنامه نویسهای دیگه خوشحال تر خواهید بود!
بد:
این خوبه:
اینم خوبه:
خب، توی این بخش از توابع حرف زدیم. توی بخش بعدی میریم سراغ کلاس ها.
پس باز هم، ادامه دارد... :)