کثیف ننویس! (بخش اول)

امروز صبح که از خواب بیدار شدم، طبق عادت همیشگی موبایلم رو برداشتم و یه چرخی تو اینستاگرام و توئیتر زدم. از اونجا که من در توئیتر به زبان انگلیسی فعال هستم و بیشتر، برنامه‌نویس‌ها رو دنبال میکنم، دیدم که taylorotwell@ (سازنده فریمورک لاراول) توئیتی از samuelstancl@ رو ریتوئیت کرده و کامنتی با این ترجمه براش نوشته: «صادقانه بگم که تقریبا همه نکاتی که در این رشته توئیت گفته شده خیلی خوبه و چیزایی هستن که خودم در برنامه‌هام انجامشون دادم. آفرین.»تصویر توئیت Taylor Otwell طبیعتاً اگه برنامه‌نویس PHP باشی و عاشق Laravel، نمیتونی از چیزی که Taylor Otwell اینطور ازش تعریف کرده به راحتی بگذری! در حالیکه حتی چشمام کامل باز نمیشدن، توئیت‌ها رو خوندم و با وجود اینکه بیشترش برام حکم یادآوری رو داشت، ولی واقعا نکات ارزشمندی بودن و میدونم که میتونه به خیلیا کمک کنه. بنابراین تصمیم گرفتم این نکات کاربردی رو به عنوان اولین پستم تو ویرگول باهاتون به اشتراک بذارم تا همه با هم تمیزتر کد بزنیم ☺.۲ نکته مهم در ابتدای کار:۱) نکات و نمونه کدها با محوریت فریمورک لاراوله اما اکثرشون مربوط به اصول کدنویسی تمیزه (Clean Code). به خاطر همین، قطعا برای افرادی که با PHP و لاراول آشنا هستن ملموس‌تره، اما برای کسانی هم که با سایر زبان‌های شی‌گرا کار میکنن و مخصوصاً با معماری MVC آشنا هستن میتونه سودمند باشه.۲) این مبحث به چند بخش (حداقل ۳ بخش) تقسیم میشه تا متن هر بخش خیلی طولانی نشه و حوصله کنید تمام نکات رو بخونید. چون واقعا ارزشمندن و شما رو به توسعه دهنده بهتری تبدیل میکنن. پس اگه این نوشته رو دوست داشتید، ? من ? رو دنبال کنید تا قسمت‌های بعدی رو از دست ندید.۱) از lookup table استفاده کنیدبه جای نوشتن else if های مکرر، از یه آرایه برای پیدا کردن مقدار مد نظرتون بر اساس کلیدی که دارید، استفاده کنید. اینطوری کدتون تمیزتر و خواناتر میشه و اگه مشکلی پیش بیاد، exceptionهاتون قابل فهم هستن و چیزی از زیر دستتون در نمیره!۲) زود برگردونیدبا برگردوندن زودهنگام یک مقدار در تابع، از nesting غیرضروری جلوگیری کنید.زیاده روی در استفاده از else و nesting (بلوک‌های تودرتوی کد)، خوندن کد رو سخت‌تر میکنه. تلاش کنید که بیش از یک سطح indentation در توابعتون نداشته باشید.۳) خطوط رو درست بشکنیدخطوط کدتون رو در جاهای تصادفی نشکنید (استفاده از line break منظورمه)، اما نذارید خیلی هم طولانی بشن.باز کردن یک آرایه با ` ] ` و حاشیه دادن (indent) به مقادیرش در خطوط بعدی میتونه جوابگو باشه. همین کارو با آرگومان‌های طویل توابع هم میتونید انجام بدین.صدا زدن توابع به صورت زنجیره‌ای (chained calls) و closureها هم نمونه مناسبی از مواردی هستن که میتونیم خطوط رو بشکنیم. ۴) بیهوده متغیر نسازیدمواقعی که میتونید مستقیماً مقدار رو پاس بدین، متغیر اضافی نسازید.۵) متغیرها رو زمانی که باعث افزایش خوانایی میشن، بسازیدبرخلاف نکته قبلی، بعضی اوقات مقادیر، حاصل فراخوانی توابع پیچیده هستن و در نتیجه، ایجاد یک متغیر باعث افزایش خوانایی کد و رفع نیازمند بودن به کامنت میشه.یادتون باشه که همیشه context مهمه و هدف نهایی خوانا بودن کدتونه. ۶) برای business logic در مدل مربوطه متد بسازیدـ business logic در واقع حاوی منطق اصلی برنامه بوده و وظیفه ارتباط بین presentation layer و data layer رو بر عهده داره.کنترلرهای شما باید ساده باشن و توشون چیزایی مثل "create invoice for order" نوشته بشه. نباید اونا رو با چیزایی مثل جزئیات ساختار دیتابیس درگیر کنید. این کارو به مدل بسپارید.۷) کلاس‌های Action بسازیدبیاین مثال قبلی رو گسترش بدیم. بعضی اوقات، ساختن یک کلاس برای تنها یک عمل (action class) میتونه کدتون رو تمیزتر کنه.درسته که مدل‌ها باید business logic مربوط به خودشون رو دربر داشته باشن، اما نباید خیلی هم بزرگ باشن.۸) از form request استفاده کنیدمواقعی که فرایند validation پیچیده‌تر میشه، میتونین یه form request بسازین. فرم ریکوئست‌ها در واقع request classهای سفارشی‌ای هستن که منطق validation رو شامل میشن. برای ساخت یه کلاس form request میتونین از دستور زیر استفاده کنین:php artisan make:request class_nameدقت کنین که این کلاس‌ها جای خوبی برای مخفی کردن validation logicهای پیچیده هستن و اگه validation logic ساده‌ای دارین، هیچ مشکلی در استفاده مستقیم از اون در کنترلر وجود نداره. برای بخش اول، همین ۸ مورد فکر میکنم کافی باشه. الان وقتشه که یه سر به کدهاتون بزنید و ببینید چقدر این موارد رو توش رعایت کردید! ? سعی کردم علاوه بر ترجمه، اگر جایی گنگ بوده، با اضافه کردن دانسته‌های خودم، به درک بیشتر مطلب کمک کنم. امیدوارم که براتون مفید واقع شده باشه. اگه اینطور بوده، خوشحال میشم که منو در ویرگول، اینستاگرام و توئیتر دنبال کنید.به اشتراک گذاری با دوستان و همکارانتون هم فراموش نشه لطفا! قطعا هر چه اونا تمیزتر کد بزنن، کار شما هم راحت‌تر میشه! ?اگه سوالی داشتین، کامنت بذارین، حتماً جواب میدم. ❤? لینک بخش‌های بعدی? کثیف ننویس! (بخش دوم)? کثیف ننویس! (بخش سوم)? کثیف ننویس! (بخش چهارم)