تعداد بازدید: 2586

تمیز نویسی در پی اچ پی – Clean Code

ویژگی های یک کد استاندارد (code quality) در هر زبان برنامه نویسی شامل موارد زیر است :

  • از نظر زمان اجرا و پاسخ دهی به درخواست ها سریع باشد.
  • کم ترین استفاده از منابع را داشته باشد.
  • از نظر ساختاری (structure) خوانا باشد. این برای سایر contributor مفید می باشد و زمان debug را پایین می آورد.

هر کد از دو جنبه مورد بررسی قرار می گیرد :

  • Behaviour : رفتار نرم افزار
  • Structure : ساختار پیاده سازی برای اعمال رفتار

Behaviour

رفتار برنامه یا همان software flow یا تعامل نرم افزار با کاربر مصرف کننده. همان چیزی که کارفرما به شما می گوید و شما به کارفرما تحویل می دهید.

معمولا رفتار یک برنامه توسط کد تعیین نمی شود. ابتدا رفتار برنامه را روی کاغذ پیاده سازی می کنند (از ابزار هایی مانند فلوچارت استفاده می کنند) و بعد یک گام جلو تر مفاهیم اصلی برنامه را تعیین می کنند (مثلا resource) و در پایان برای پیاده سازی آن اقدام می کنند.

با تغییر در ساختار کد (structure) نباید تغییری در رفتار برنامه ایجاد گردد برای همین ما برای کدهایمان تست می نویسیم.یعنی پس از تغییر در ساختار کد مجددا تست ها را اجرا می کنیم تا مطمئن شویم که برنامه به درستی کار می کند.

هر کلاس باید یک رفتار را پیاده سازی کند و هر متد باید یک عملیات را انجام دهد. به طول مثال :

Like.php
Setting.php
Translate.php

مثلا فایل Like.php حاوی یک کلاس با نام Like می باشد که در آن عملیات های مختلفی در رابطه با رفتار Like در نرم افزار وجود دارد. بهتر است نام کلاس ها باید به صورت Capitalize پیاده سازی شوند و هم نام با فایل آن.

هر متد باید یک عملیات را انجام دهد. به طور مثال اگر نیاز است که یک متد یک داده را ثبت کند ماهیت آن باید ثبت داده باشد و اگر اجازه ثبت داده را لازم داشت باید در متدی مجزا آن را ثبت کنیم.

public function checkPermission(){
	//check permission
}
public function setPostMeta(){
	$this->checkPermission();
	//set post meta
}

این نحوه پیاده سازی ما کد را خوانا تر می کنید و تست نویسی برای آن را ساده تر و در نهایت دیباگ کردن را آسان می سازد.این مطالب مربوط به Structure می باشد اما چون ماهیتی کلی دارد در قسمت Behaviour گفته شد.

نکته : معماری های نرم افزاری MVC و HMVC نوع رفتار نرم افزار را تعیین می کنند.

Structure

ساختار کد یا همان اصلاح clean code که نحوه کد نویسی شما را تعیین می کند. در این مورد باید یک سری استاندارد ها را رعایت کند یا گاها از یک سری pattern ها پیروی می کنید که وقتی کسی کد شما را ببنید بتواند تشخیص دهد که از چه ساختاری پیروی کرده اید.

برای بالا بردن کیفیت کد (Code Quality) ما یک سری Concept را باید رعایت کنیم.

خوانا بودن برنامه (human readable) : این یعنی کدی که قرار است در 30 ثانیه بفهمد ما آن را طوری ساختاربندی کنیم که در 10 ثانیه متوجه عملیات گردد.

هر فردی می تواند کدی بنویسد که توسط کامپیوتر شناخته شود ، یک برنامه نویس خوب باید کدش توسط انسان هم خوانده شود.

برای این کار باید متد ها و متغیرها را با نام مناسب انتخاب کنیم. نام مناسب نامی است که گویای عملیات متد یا هدف متغیر باشد.

معمولا کدهای زشت (در اصطلاحی به آن ها ماکارانی نیز می گویند) خوانا نیست. طول هر متد نباید از 20 خط تجاوز کند و طول کلاس نباید از 200 خط بیشتر شود . کما این که هر قدر کمتر باشد بهتر است. عملیات ها را با خط کد های کمتری با همان عملکرد پیاده سازی شود.

هر قدر indent برنامه شما کم تر باشد بهتر است. برای حصول این هدف می توان از تکنیک های زیر استفاده کرد :

  • Combine If Block : ادغام if ها که با استفاده از عملگر های منطقی (and , or).
  • Input Normalization : می توانید در شرط ها و یا حلقه ها اگر به ازای هر نوع داده یک روال است از نوع داده آرایه که عمومیت بیشتری دارد استفاده کنید.
  • Early Returns : مثلا اگر if و else داریم قسمت کوچکتر را در ابتدا قرار دهیم و return کنیم تا هم یک واحد indent کم تر داشته باشیم هم برنامه سریعتر اجرا گردد.
  • array_filter : نوع داده آرایه در refactor کردن کد خیلی کمک می کند.اگر ورودی تابع آرایه است و در آرایه داده های غیر مرتبط است با این تابع می توان آن ها را حذف کرد.
  • Look up Table : استفاده از آرایه برای چک و جستجو در مقادیر.
  • minimum Indent : در کد خود حداقل indent را داشته باشید. افزایش indent زمان فهم برنامه را بیشتر می کند.
  • extract conditions to methods : شرط های طولانی را به یک متد با نام با معنی تبدیل کنید. به طور کل هر جا شرطتان بزرگ شد اون رو توی یک متد ببرید.
  • call user function : ساخت یک router به ازای یک مقدار یک رشته و اعمال متد های مختلف (استفاده از توابع call_user_func و call_user_func_array).
  • routers : ساخت routers برای اجرای یک متد خاص به ازای مقدار خاص.
  • casding to boolean : وجود یا عدم وجود یک متغیر یا اعمال منطقی روی متغیر ها خروجی boolean دارد و ما می توانیم شرط را return کنیم.
  • loop array map : عدم استفاده از شمارنده در حلقه های foreach . این شمارنده به ازای آرایه های ساده نیز به عنوان کلید وجود دارد.
  • in_array : استفاده از تابع in_array به ازای شروط مختلف در منطق OR .
  • null coalecing operator : عملگر جدید در php7 که به این معنی است که اگر مقداری set شده بود از آن استفاده کن مگر نه مقدار پیش فرض را برگردان. این عملگر مکمل تابع isset می باشد. این عملگر وجود یا عدم وجود یک متغیر را شرط قرار می دهد.
  • ternary operator : این عملگر null بودن یک متغیر را شرط قرار می دهد و برای متغیر های تعریف نشده notice می دهد.

Behaviour و Structure دو مفهوم انتزاعی هستند. یعنی زمانی که شما درگیر Behaviour برنامه هستید تمرکزتان را روی آن می گذارید . پس از اتمام برنامه مجددا Structure برنامه را مرتب می کنید (code clean) و تست را اجرا می کنید تا ببینید مشکلی در روند Behaviour برنامه بوجود نیامده باشد.

مطالب مشابه

هدر های Http در درخواست و پاسخ

Http Headers (قسمت سوم)

Http Request و Http Response درخواست و پاسخ بر اساس پروتکل Http می باشند و می توان از این ها برای ارتباط میان نرم افزار...

امنیت و رمزنگاری در پی اچ پی

امنیت و رمزنگاری در php

امنیت و رمز نگاری دو مبحث مهم در برنامه ها به شمار میره. به طور کلی ما باید برای حفاظت باید برنامه هامون در برابر حملات...

هدر های Http در درخواست و پاسخ

Http Headers (قسمت دوم)

http headers حاوی اطلاعاتی در رابطه با نوع درخواست ما می باشند. همچنین یک نوع رابط میان درخواست کلاینت و پاسخ سرور در...

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای تمیز نویسی در پی اچ پی – Clean Code

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *