php Code Refactoring Series - part10

سری پست های اصلاح کد ها در پی اچ پی اگر با سری پست های اصلاح کد های پی اچ پی آشنایی ندارید و یا سایر قسمت ها را نخوانده اید از اینجا شروع کنید: https://virgool.io/@vahiiiid/php-code-refactoirng-series-introduction-pckzxvccjw6f این پست یک مقدار متفاوت با شماره های قبلی هست و میخوام php-fig رو با هم ببینیم که چی هست و از یکی از استاندارد های اون برای تمیز کردن کد هامون استفاده کنیم و یک سری جزئیات دیگه :).اگر برنامه نویس php هستید قطعا با استاندارد هایی که از طرف php-fig یا همون گروه استاندارد سازی معروف PHP Framework Interop Group ارائه می شود آشنایی دارید، یا حداقل اسم بعضی از استاندارد های پر کاربرد اون مثل PSR-4 به گوشتون خورده! بله دقیقا همون استانداردی که composer برای پیاده سازی Autoloading از اون پیروی میکنه و شما توی کد های خودتون یا هر فریم ورکی که از composer برای لود فایل ها استفاده می کند استفاده کرده اید. اما PSR-4 تنها یکی از استاندارد های موجود هست و هر کدوم از استاندارد های ارائه شده در زمینه متفاوتی از هم دیگه هستند.این استاندارد ها در زبان های دیگه مانند جاوا نیز وجود دارد، برای مثال Java Specification Requests استاندارد های زبان جاوا هستند که توسط گروه Java Community Process ارائه میشه.یکم بیشتر در مورد PHP Framework Interop Group بدونیماین گروه در سال ۲۰۰۹ با هسته اولیه ۵ نفره شکل گرفته است و تا به تعداد زیادی استاندارد در زمینه های مختلف رو ارائه کرده اند که حدود ۱۲ تای اونها توی لیست Accepted یعنی نهایی شده قرار دارند.ساختار اسم گذاری استاندارد ها به این صورت هست که با psr که مخفف PHP Standard Recommendation هست شروع می شوند و با عددی که بعد از اون میاد شماره گزاری شده اند.در اینجا می توانید لیست اونها رو ببینید و با کلیک روی هر کدوم جزئیات هر استاندارد رو کامل تر بخونید.اساس کار این گروه به این صورت هست که برنامه نویس هایی از فریم ورک های فعال php جمع شده اند که الان حدود ۲۰ نفری هستند و سعی می کنند یک سری استاندارد هایی برای نوشتن کد های php در زمینه هایی مثل Message Interface , Coding Style Guide، Autoloading Standard و ... ایجاد کنند.بعد از شکل دهی یک استاندارد که معمولا توسط یک نفر انجام می شود اون رو به رای می گذارند و اگر طبق پروتوکل رای گیری جالبی که دارند رای بیاورد به عنوان یکی از استاندارد های ACCEPTED به لیست اضافه می شود در غیر این صورت استاندارد یا رد میشود یا اعضای گروه در مورد اون بحث و گفتگو میکنند تا اون رو کامل تر کنند که توی اکثر فریمورک ها و cms های موجود استفاده بشه.اگر می خواهید لیست اعضای فعلی و سابق php-fig رو ببییند اینجا کلیک کنید، همون طوری که تو لیست می بینید Taylor Otwell و Fabien Potencier توسعه دهنده های اصلی فریم ورک های لاراول و سیمفونی هم عضو های سابق این گروه بوده اند.متن پایین ایده اصلی این گروه طبق گفته ی رسمی خودشون هست:ایده این گروه که شامل نمایندگان پروژه های اصلی پی اچ پی یعنی فریم ورک ها و cms ها است این هست که در مورد مشترکات میان پروژه ها بحث کنیم و راه هایی را که بتوانیم با هم بهتر کار کنیم، پیدا کنیم. اما ما بسیار آگاه هستیم که بقیه جامعه پی اچ پی نیز از این استاندارد ها استفاده خواهند کرد. بنابر این هر کس از این استاندارد ها استفاده کند قطعا راضی خواهد بود اما هیچ کس در گروه نمی خواهد شما را به عنوان یک برنامه نویس مجبور کند که چگونه برنامه خود را بنویسید.خوب فکر میکنم اطلاعات خوبی در مورد php-fig کسب کردیم بیایید یکی از استاندارد های اون رو که اتفاقا از اولین استاندارد های ثبت شده گروه هم هست رو باهم ببینیم:استاندارد استایل دهی به کد ها یا PSR-2: Coding Style Guideهدف این استاندارد همون طوی که مشخص است یکسان سازی نوشتن کد ها هست تا با صرف کم ترین زمان ممکن بتونیم کد های هم دیگه رو بخونیم و متوجه بشیم.برای مثال آیا تا به حال با خودتون فکر کردید نوشتن هر خط را تا چند کاراکتر نهایتا جلو ببرم که طولانی نشود؟آیا بلاک های کلاس خودتون رو در همان خط تعریف کلاس باز میکنید یا خط بعدی؟ در مورد شرط ها و حلقه ها چطور؟ بستن بلاک ها چی؟شایدم بعضی موقع ها که دارید تابع تعریف میکنید و تعداد ورودی ها زیاد هستند به این فکر کردید که اوکیه این تعداد ورودی یا نه؟خوب PSR-2 کلی جزئیات داره که این جور مسائل رو حل کنه و راحت بتونیم توی یک پروژه که تعدادی زیادی برنامه نویس وجود دارد کارکنیم و راحت دست خط هم دیگه رو بخونیم و چشممون به کدها کاملا آشنا باشه و کار عجیب غریبی از کسی نبینیم.یک نکته ای که باید اشاره کنم در مورد خواندن جزئیات هر استاندارد، از اونجایی که تمام نکات گفته شده داخل هر استاندارد با الویت یکسانی نیستند بنابراین از یک سری کلمات برای مشخص کردن میزان سخت گیری در رعایت کردن هر کدوم استفاده میشود.برای مثال ممکن هست بهتر باشد که یک موردی رعایت شود ولی مورد دیگری باشد که حتما باید رعایت شود پس با مفاهیم کلمات زیر باید حتما آشنا باشید که به ترتیب از الویت اجرای بالا به پایین هستند:“MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL”اما نکته آخر که جای خوشحالی داره اینه که کافیه شما این استاندارد رو روی محیطی که دارید توش کد می زنید تنظیم کنید تا خودکار برای شما تمام فایل ها تون رو مرتب کنه. مثلا اگر از phpstorm استفاده می کنید به راحتی می تونید توی قسمت File->Settings برید و از اونجا Code Style رو از لیست باز کنید و روی PHP کلیک کنید و طبق عکس زیر Predefined Style رو روی PSR1/PSR2 بزارید.نحوه اضافه کردن psr-2 به عنوان code style در phpstormحالا داخل هر فایلی که هستید کافی هست کلید های Ctrl+Alt+l رو بزنید تا phpstrom کد های شما رو بر اساس psr-2 مرتب کنه.دلیل اینکه به جای psr-2 اینجا PSR1/PSR2 رو داشتیم این هست که psr-2 در واقع تکمیل کننده استاندارد قبلی خودش یعنی psr-1 هست پس حتما نگاهی هم به psr-1 بندازید.اما یک چیز باحال تر از این! وقتی شما روی پروژه های بزرگ تر contribute می کنید حتی نیازی نیست که کد ها رو قبل از ارسال مرتب کنید چون سرویس های آنلاینی هستند مثل styleci که این کار رو اتوماتیک انجام می دهند. برای مثال شما یک pull request روی پروژه github باز می کنید، ابتدا تمام کد های تغییر یافته طبق استاندارد psr-2 اصلاح می شوند و بعد pull request تایید می شود، خیلی خوبه نه؟ این جوری تعداد زیادی برنامه نویس باهم یک پروژه رو جلو می برند و هیچ سردردی هم برای خوندون merge ها نداریم و میتونیم با سرعت بیشتری بفهمیم هر کسی چه تغییراتی روی branch خودش داشته.خلاصه مطالب این پست:معرفی php-fig و psrبررسی استاندارد psr-2تنظیم این استاندارد برروی phpstormمعرفی ابزار آنلاین code stylingلطفا نظرتون رو توی کامنت ها بنویسید تا این سری پست های اصلاح کد های پی اچ پی رو با هم دیگه کامل تر کنیم.معرفی و مشاهده سایر پست های اصلاح کد های پی اچ پیراستی لایک هم لطفااااااا یادتون نره :)