کثیف ننویس! (بخش چهارم)

سلام میکنم به همه دوستانی که دارن این نوشته رو میخونن. من امیر ضیاپور هستم و بالاخره رسیدیم به آخرین بخش این موضوع. این سری نوشته‌ها از ? اینجا ? شروع شد و قراره با این قسمت خاتمه پیدا کنه. پس با من همراه باشید و نکات این بخش رو هم به ذهن بسپارید و تو کدهاتون ازشون استفاده کنید.۲۹) از عملگرهای کوتاه استفاده کنیدزبان PHP عملگرهای بسیار کارآمدی داره که میتونن جایگزین if-check های زشت بشن! پس اونا رو بخاطر بسپارید و ازشون استفاده کنید.۳۰) استفاده از helper ها به جای facade ها رو در نظر بگیریدمیشه گفت که این مورد بیشتر یه نظر شخصیه، اما صدا زدن یه تابع global به جای اینکه یه کلاس رو import کنید و متد استاتیکشو صدا بزنید، به نظر من قشنگ تره.علی الخصوص در مورد سینتکس ('session('key. ۳۱) برای business logic، دستورات blade سفارشی بسازیدمیتونین با ساختن دستورات سفارشی، محتویات فایل‌های blade خودتون رو گویاتر کنید. برای مثال، به جای چک کردن این که یوزر، ادمین است یا نه، میتونین دستور admin@ رو بسازید و ازش استفاده کنید.۳۲) تا جایی که ممکنه، تو Blade به دیتابیس کوئری نزنیدبعضی اوقات ممکنه که بخواین کوئری‌ها رو تو فایل blade اجرا کنید. برخی از مواقع ایرادی تو این کار وجود نداره، مثلا داخل فایل‌های layout.اما اگه اون view رو قراره یه کنترلر برگردونه، اطلاعات رو درون کنترلر از دیتابیس بگیرین و به view پاس بدین.۳۳) مقایسه strict انجام بدینهمیشه از مقایسه strict استفاده کنید (=== و ==!). اگه لازم بود، قبل از مقایسه، مقادیر مورد مقایسه رو به type درستشون cast کنید. این کار بهتر از اینه با نتایج عجیب حاصل از == روبرو بشین.همچنین، strict types رو تو کدتون فعال کنید. این کار باعث میشه که نتونین متغیرهای با type نادرست رو به توابع پاس بدین.۳۴) از doc-block فقط زمانی استفاده کنید که به درک عملکرد کمک می‌کننخیلی از افراد با این نکته مخالفن، چون خودشون برای همه فانکشن‌ها doc-block مینویسن. اما واقعا با عقل جور درنمیاد!وقتی یه doc-block هیچ اطلاعات اضافه‌ای رو به خواننده‌اش نمیده، پس چرا باید نوشتش؟ اگه type hint برای درک کار فانکشن کفایت میکنه، دیگه لازم نیست doc-block رو هم اضافه کنید.۳۵) یک منبع واحد برای قوانین validation داشته باشیداگه attributeهای یک resource رو در جاهای مختلف اعتبارسنجی (validate) می‌کنید، قطعا باید قوانینش رو تو یه جای مشخص یک بار بنویسید و هر بار اونها رو تکرار نکنید تا در صورت نیاز به ایجاد تغییر تو قوانین، لازم نباشه بگردین تا هر جا که ازش استفاده کردید رو پیدا کنید.مثلا تو عکس پایین، یه متد تو کلاس مدل براش در نظر گرفته شده، اما یه راه (درست‌تر) دیگه‌اش، استفاده از Form Request Class هست که در بخش‌های قبلی همین مقاله بهش اشاره شده.۳۶) از کالکشن‌ها فقط وقتی که کدتونو تمیزتر میکنن استفاده کنیدلازم نیست که تمام arrayها رو به کالکشن تبدیل کنید فقط به این خاطر که لاراول این امکان رو بهتون میده. اما اگه جایی استفاده از کالکشن، کدتون رو تمیزتر میکنه، حتما ازش بهره ببرید.۳۷) از کد functional وقتی استفاده کنید که واقعا فایده‌ای داشته باشهکد فانکشنال هم میتونه کد رو تمیز کنه، هم غیر قابل درکش کنه! لوپ‌های معمول رو به فانکشن ریفکتور کنید، اما فقط به دلیل این که نمیخواین یه حلقه بنویسین، ()reduce های فوق پیچیده رو جایگزینش نکنین. تو عکس پایین، مثالی از هر دو مورد هست.۳۸) کامنت‌ها اغلب نشون دهنده طراحی کد ضعیف هستنقبل از این که یه کامنت رو بنویسید، از خودتون بپرسین که چطور میتونم با تغییر نام بعضی چیزا یا ایجاد متغیر، خوانایی کد رو بیشتر کنم و نیاز به نوشتن کامنت رو از بین ببرم. اما اگه شدنی نبود، کامنت رو طوری بنویسید که هم خودتون هم همکاراتون ۶ ماه بعد متوجه بشن منظورتون چیه!? کانتکست مهمه!تو نکته‌های قبل گفتم که انتقال بیزینس لاجیک به کلاس‌های action/service کار خوبیه. اما کانتکست اهمیت داره.عکس زیر یکی از نکات ریپازیتوری معروف "Laravel best practices" تو گیتهابه. واقعا هیچ دلیلی نداره که بخواین یه if-check سه خطی رو به یه کلاس تبدیل کنید! با این کار اصطلاحا over-engineering انجام دادین.خب دوستان، به پایان رسید این دفتر، اما حکایت کدنویسی تمیز و برنامه‌نویس بهتر شدن همچنان باقیست و فکر نکنم حکایتی باشه که حالا حالاها تموم بشه!در پایان این مقاله لازمه بگم که هیچ ضرورتی وجود نداره که تمام نکاتی که گفته شد رو رعایت کنید. هدف شما نوشتن کد خواناست نه صرفا انجام دادن کارهایی که یه نفر تو اینترنت گفته!همیشه موقع نوشتن کد از خودتون بپرسید «بهتر نیست اینجوری انجامش بدم؟». اگه جواب مثبت بود، پس « اینجوری! » انجامش بدین. ?? بدیهیات!❤ اگه نوشته رو دوست داشتین، لایک کنین؛? اگه نظری داشین، نظرتونو برام بنویسید؛? اگه براتون مفید بوده و قصد حمایت دارید، با دیگران به اشتراک بذارید.? لینک بخش‌های قبلی? کثیف ننویس! (بخش اول)? کثیف ننویس! (بخش دوم)? کثیف ننویس! (بخش سوم)