فصل 3 توابع
-------------------
1- توابع باید کوچک و کوچکتر باشند تا خوانایی اونها به خاطر کوچک بودنشون بهتر بشه
2- یک تابع نباید به اندازه ای بزرگ باشد که بتواند ساختارهای تو در تو را نگهداری کند و ساختارهای تو در تو در یک تابع نباید بزرگتر از 1 یا 2 باشد ( ساختارهای تو در تو منظور if while و .. ’)
3 - تابع باید یک کار انجام دهد و آن را به خوبی انجام دهد و فقط هم همین کار را انجام دهد یکی از راههای شناختن این که تابع بیش از یک کار را انجام می دهد این است که شما نتونید تابعی با نام دیگری از درون آن استخراج کنید که صرفا یک بازگویی مجدد از اجرای کار در آن باشد
4- برای نامگزاری نام توابع از عبارتهای توصیفی استفاده کنید یک نام توصیفی طولانی بهتر از یک نام کوتاه مبهم میباشد همچنین یک نام توصیفی طولانی بهتر از یک کامنت توصیفی طولانی میباشد
5- از یک قرار داد نامگزاری استفاده کنید که اجازه میدهد نامهای چندگانه به راحتی در نام توابع استفاده شود و سپس از کلمات چندگانه استفاده کنید تا بتوانید کاری را که تابع انجام میدهد نشان دهید همچنین از عبارات مشابه اسمها و فعل هایی که در تابع خود استفاده کرده اید برای نامگذاری ماژولها استفاده کنید
6- بهترین حالت یک تابع برای داشتن آرگومانت این هستش که یا نداشته باشه یا یکی داشته باشه یا هم دو تا و داشتن یک تابع با داشتن آرگومنتهای مختلف از نظر تست کار رو برای ما سختتر میکند سختی نوشتن تمام موردهای آزمون برای اطمینان از اینکه تمام ترکیبات مختلف آرگومان وجود داشته باشد کار خیلی سختی هستش
7- تابع و آرگومان باید ترکیب از اسم و فعل باشند که باهم هماهنگی داشته باشند
8- قانون جدا سازی فرمان و جست و جو توابع ما باید یا به چیزی پاسخ دهند یا اینکه کاری انجام دهند و نه هر دو برای مثال تابع ما باید وضعیت اشیا را تغیر دهد یا اینکه باید برخی از اطلاعات مربوط به اشیا را بر گرداند و انجام این دو کار با هم باعث سردرگمی بیشتر میشود
9- بلاکهای try / catch در نوع خودشان زشت هستند و ساختار کدمون رو با پیچیدگی مواجه میکنند و پردازش خطا را با پردازش عادی ترکیب میکنند بنابراین بهتر هستش try / catch را استخراج و از بدنه کد خود خارج کنید همچنین همان طور که قبلا گفته شد توابع بهتر هستش فقط یک کار رو انجام دهند مدیریت خطا یک کار است بنابراین تابعی که خطاها رو اداره میکند هیچ کار دیگری رو نباید اجرا کند و اگر اومدیم و از کلمه کلیدی try / catch استفاده کردیم باید اولین کلمه تابع باشد و بعد از بلوک catch / finally چیز دیگری نباشد
10- سعی شود در انجام یک تابع از انجام یک تکرار جلوگیری شود
11- قانون گام به گام ما وقتی میایم و کدمون رو مینویسیم باید شبیه به یک داستان باشد و هر تابع باید باید توسط توابع که در سطح بعدی انتزاع هستند دنبال شود تا بتوانیم برنامه را بخانیم
12 - عبارات switch تنها با دو مورد بزرگتر از یک بلوک با عملکرد واحد میباشد و این کار هم سخته که عبارت switch بنویسیم که فقط یک کار رو انجام میدهد چون switch ذاتا n کار رو میتونه انجام بدهدو ما باید موقعی از عبارات switch استفاده کنیم که در یک کلاس سطح پایین قرار میگیرد و هرگز تکرار نمیشود که این کار رو باید با استفاده از چندریختی یا Polymorphism انجام دهیم و در کل قاعده کلی استفاده از اونها باید به این شیوه باشند که اینها فقط یک بار ظاهر میشوند و برای ایجاد اشیا چندریختی استفاده میشود و در پشت رابطه ارث بری پنهان میشودتا بقیه سیستمها اون هارو نبینند