طراحی سایت نت افزار

hosting image
جاوا اسکریپت چیست

استاندارد برنامه نویسی کنیم (مقدمه)

استاندارد برنامه نویسی کنیم (مقدمه)

 

توی این مقاله میخوام درباره اولین تجربه خودم در حوزه برنامه نویسی php که روی یک پروژه بزرگ کار میکردم باهاتون صحبت کنم.

اولین روزهایی که ما دوستان برنامه نویس با هم برنامه نویسی رو شروع کردیم خیلی مهم نبود که استاندارد های برنامه نویسی رو رعایت کنیم اما بعد از گذشت ۶ ماه این موضوع کم کم جدی شد. طوری که برای تغییر دادن یک بخش کوچک که به نظر میرسید کار یک روز باشه ما مجبور بودیم که چند روز و بعضی وقت‌ها چند هفته وقت بگذاریم تا بتونیم اون کار رو انجام بدیم. لذا برنامه‌ای جدی گذاشتیم تا در اولین فرصت کد های خودمون رو ریفکتور کنیم تا هم همکارانمون بتونن متوجه کدهایی که ما زدن بشن و برعکس و هم اینکه با تغییر دادن یک بخش، بخش دیگری کرش نکنه.

PSR

پس از اینکه جستجوی لازم رو برای استاندارد های موجود انجام دادیم که در ادامه میخواهم به یک به یک این استاندارد ها بپردازم.

خب اولین چیزی که متوجه شدیم این بود که باید اول کد زدنمون رو درست کنیم. این یعنی اینکه اسم کلاس‌ها، سیمبول ها، پراپرتی ها، توابع و … رو باید درست بنویسیم. پس گشتیم و گشیتم تا به سایت https://www.php-fig.org برخورد کردیم.

استاندارد برنامه نویسی کنیم (مقدمه)

در این سایت در بخش PSR استاندارد هایی رو که مورد تأیید قرار گرفته شده رو برای عموم گذاشتن تا همه بتونن از تجربیات افراد متخصص استفاده کنن و یک‌دست کد بزنن.

وقتی وارد تب PSRs بشید میبینید که تاکنون ۱۱ استاندارد Accept شده و همچنین مقاله های بیشتری در حال بررسی هستند تا Acceptشوند و جزء استاندارد ها قرار بگیرند.همچنین مواردی هستند که رها شده‌اند ABANDONED و همچنین موردی هست که دیگه استفاده نمیشه DEPRECATED چون که جای اون یه پکیج جدید وجود داره.

در ادامه موارد ۱ تا ۷ ام رو به طور اختصار توضیح میدم.(البته مواردی که Accept هستند;

  1. Basic Coding Standard : PSR-1
  2. Coding Style Guide : PSR-2
  3. Logger Interface : PSR-3
  4. Improved Autoloading : PSR-4
  5. Caching Interface : PSR-6
  6. HTTP Message Interfaces : PSR-7

استاندارد PSR-1

استاندارد برنامه نویسی کنیم (مقدمه)

به طور خلاصه باید بگم در این استاندارد به نحوه پیاده‌سازی کد ها در فایل‌ها پرداخته شد و نام گذاری کلاس‌ها و توابع و … پرداخته شد. که به صورت تیتروار موارد ذیل هستش

  • فایل‌ها مجازند تنها تگ <?php و <?= رو داشته باشند.
  • برای کد نویسی باید از UTF-8 without BOM استفاده شود.
  • فایل‌ها یا باید برای تعریف سیمبول ها(کلاس ها و متدها و …) باشند یا برای side-effect ها (مثلاً فایل‌های تنظیمات مثل setting
  • نام محیط namespace فایل‌ها باید از یکی از استاندارد های PSR-0 (منسوخ شده) یا PSR-4 تبعیت کنند. برای اینکه به صورت اوتوماتیک در فایل php لود شوند. لازم به ذکره که namespace همون چیزی هستش که در بالای فایلها مینویستم که نشون بدیم این فایل مربوط به چه کسی و چه پکیجی هستش و در چ آدرسی قرار گرفته تا سیستم کامپوزر متوجه بشه و اونو اتوماتیک در پروژه require کنه.
  • نام کلاس‌ها باید به صورت StudlyCaps نوشته بشوند. مثلاً اینجوری TestClass.
  • تمامی constants های یک کلاس باید به صورت حروف بزرگ و با خط فاصله underscore جدا شوند. مثلاً DEFAULT_VALUE
  • همگی متد ها باید به صورت شتری camelCase نوشته بشوند. مثلاً testFunction
  • نکته مهم اینه که برای متغیر ها هیچ خط مشی ای مشخص نشده لذا هر طور که خواستید بنویسید که البته من همیشه به صورت camelCase مینویسم ولی شما میتونید از روش خودتون استفاده کنید. ولی نکته بسیار بسیار مهم آینه که همه جا از یک روش استفاده کنید نه اینکه یه جا camelCase و یه جای دیگه under_score و یه جای دیگه StudyCap بنویسید.

استاندارد PSR-2

استاندارد برنامه نویسی کنیم (مقدمه)

این استاندارد در ادامه استاندارد قبلی است. و مواردی که در این استاندارد رعایت شود به صورت تیتر وار به قرار ذیل است:

  • باید استاندارد PSR-1 رعایت شود.
  • برای indentation باید ۴ اسپس زده شود. Indextion همان فاصله هایی است که کدهای زیر یک تابع یا حلقه نسبت به خط بالاسری دارد.
  • هیچ محدودیت hard limit ای برای طول خط ها وجود ندارد. اما soft limit برای هر خط ۱۲۰ کاراکتر هستش. یعنی طول خطوط اگر بیشتر از ۱۲۰ تا شد باید اینتر بزنید و در خط پایینی ادامش بدید.
  • تنها یک خط خالی بعد از namespace ویک خط خالی بعد از use ها باید باشد.
  • curly bracket بعد از کلاس و متد باید در یک خط باشد و در پایان هم همینطور.
  • برای تمام متد ها و پراپرتی ها باید Visibility مشخص شود. یعنی مثلاً مشخص شود که public هستش یا private یا برای پراپرتی ها (متغیر های داخل کلاس که عمومی هستن) protected, abstract و …
  • کنترل استراکچر ها یا همان If و switch case و …
  • باید بین شرط ها بعد از ویرگول یک اسپس زده شود.
  • پرانتز شرط ها بدون فاصله به آن‌ها میچسبد. curly bracket بازشونده در همان خط و curly bracket بسته شونده یک خط پایین‌تر از متن و در یک خط نوشته شود.
  • متنی که در هر شرط نوشته می‌شود باید بدون هیچ فاصله‌ای نسبت به خط بالایی نوشته شود.

استاندارد برنامه نویسی کنیم (مقدمه)

چون در این بخش صرفاً میخوام همه چیز رو معرفی کنم در اینجا فقط توضیح مختصری داده شده که در مقاله‌های بعدی کاملاً با نمونه کد تشریح خواهم کرد.

استاندارد PSR-3

نکته‌ای که باید اینجا بگم اینه که Interface در عنوان هر استاندارد به معنی مجموعه کدی در قالب یک پکیج است که به پروژه اضافه میشه و اون رو یکدست میکنه. به صورت خلاصه میتوان گفت که برای مرتب کردن نحوه لاگ کردن هستش که در قالب ۸ متد:

  1. debug
  2. info
  3. notice
  4. warning
  5. error
  6. critical
  7. alert
  8. emergency

استاندارد برنامه نویسی کنیم (مقدمه)

مطرح شده است. با این روش لاگ گرفتن ها و یا ثبت اطلاعات در فایل لاگ پروژه مرتب خواهد شد و از قانون استانداردی تبعیت خواهد کرد.

استاندارد PSR-4

همون چیزی هستش که به خاطر اون در پروژه هامون از Composer استفاده میکنیم. اگه بخواهیم بدون استفاده از composer یک پروژه را درست کنیم در فایل index.php باید چند صد بار از require_once استفاده کنیم. اما با این روش فایل‌ها به صورت اوتوماتیک در پروژه لود می‌شوند و فقط کافی است که قبل از کلاسی که میخواهیم از آن استفاده کنیم اونها رو با namespace مربوطه use کنیم. مثال کامل و دقیق تر این استاندارد رو در یک مقاله کاملاً جدا خواهم نوشت تا دوستان به عمق composer پی ببرند چون خودم هم مدت‌ها نمیدونستم دقیقاً کار کامپوزر چی هستش.

استاندارد PSR-6

همون طور که از عنوان این استاندار پیداست این پیکیجی برای یک‌ دست شدن دیتا ها در سیستم Cache میباشد. در این پکیج برنامه نویسان میتوانند به صورت یکپارچه از سامانه Cache استفاده کنند که در آن با استفاده از کلید و زمان انقضا متغیر مورد نظر خودشون بر روی هارد دیسک و یا رم ذخیره کنند.

استاندارد PSR-7

در این پکیج نیز استانداردی برای بیان کردن پیغام های HTTP معرفی شد. تا قبل از این استاندارد با استفاده از متغیر هایی نظیر _SERVER و یا _GET پارامتر های ورودی ریکوئست را دریافت کرد. این پکیج شامل دو اینترفیس RequestInterface و ResponseInterface که به ترتیب برای دریافت پارامتر ها و برای ارسال پارامتر ها با استفاده از پروتکل HTTP Message می‌باشد.

استاندارد برنامه نویسی کنیم (مقدمه)

 

Leave a Reply

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