رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کد نویسی استاندارد: آشنایی اولیه و ذکر مثال هایی در PHP و جاوااسکریپت
#1
«علامت استاندارد نشانه مرغوبیت کالاست» :)

در این مقاله قصد داریم راجع به «کدنویسی استاندارد» صحبت کنیم. به دو مثال زیر توجه کنید:

کد:
if(){


// some code


}else{


// some code


}





if () {


// some code


}


else {


// some code


}


از نظر ماشین ها کدهای بالا هیچ فرقی با یکدیگر ندارند. اما برای ما انسان ها از نظر ظاهری متفاوت هستند. شما کدامیک را ترجیح می دهید؟ و به چه دلیل؟ در ادامه مطلب با ما باشید تا تصمیم بگیریم کدام بهتر است و چرا.

استانداردها و رسوم کدنویسی، گایدلاین ها (راهنما و دستورالعمل) برای زبان های برنامه نویسی هستند که شیوه های خاصی برای کدنویسی را توصیه می کنند. این گایدلاین ها توصیه هایی برای کامنت گذاری، فاصله گذاری، تعریف و نام گذاری متغیرها (variable)، چگونگی فضاهای خالی و … دارند.

بسیار توصیه می شود که برنامه نویسان نرم افزارها حتما از این استانداردها استفاده کنند تا کدهایشان به آسانی توسط سایرین خوانده شود.

برای آشنایی بهتر، در ادامه تعدادی از توصیه ها در زبان های PHP و جاوااسکریپت را می آوریم. همان طور که در این مقاله خواهید دید بعضی از استانداردها توسط شرکت ها و تیم های تجاری بزرگ گردآوری و فرمول شده اند و برخی دیگر قوانینی غیر رسمی بوده و به مرور به عادت های کدنویسی افراد اضافه شده اند. توجه کنید که عدم استفاده از این توصیه ها به معنای اشتباه بودن کد شما نیست. اما بسیار توصیه می شود که در کدنویسی حتما از این استانداردها یا استانداردهای مشابه دیگر استفاده کنید.

خوب بودن بر اساس استاندارد عامیانه ای که از خوبی داریم، کار آسانی است. باید مقداری احترام را با افکار جالب مخلوط کرده و کمی شیطنت به مقدار لازم اضافه کنید.
اقتباس شده از اسکار وایلد (۱۸۵۴ - ۱۹۰۰)

چرا استاندارد نویسی اهمیت دارد؟

گرچه استاندارد نویسی در ابتدا مشکل است و بیهوده به نظر می رسد، اما زمانی که نرم افزارتان بزرگ شود و حجم آن به چند هزار خط در چند صد فایل برسد، فواید آن مشخص می شود. بعضی از این فواید عبارتند از:

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

مشکل اصلی برای استاندارد نویسی این است که کمی زمان می برد تا به آن عادت کنید. و اگر در زمانی که در حالت تغییر از عادت های قدیمی به استاندارد نویسی هستید وسواس کافی به خرج ندهید، در نهایت به مخلوطی از این دو تبدیل می شوید. برای جلوگیری از این مشکل در ابتدا باید مدام به گایدلاین های استاندارد نویسی مراجعه مکرر داشته باشید تا به آن عادت کنید. پس از آن شما به یک استاندارد نویس تمام عیار تبدیل خواهید شد.

indent گذاری و فضای سفید

«زمانی که روی مشکلی کار می کنم، هرگز راجع به زیبایی کد فکر نمی کنم. فقط روی حل مشکل تمرکز می کنم. اما زمانی که مشکل حل شد، اگر راه حل زیبا نبود می دانم که آن راه اشتباه است.»
R. Buckminster Fuller

ایندنت گذاری با دو اسپیس (space) انجام می شود، نه با تب (tab). مانند زیر:

کد:
if (a) {


 code


}

همان طور که می بینید کلمه code نسبت به متن اطراف با دو اسپیس جلوتر آمده. در صورتی که خود نرم افزار کد نویسی تان این کار را با تب انجام می دهد، به تنظیمات آن بروید. معمولا تمامی آنها تنظیمی برای جایگزینی تب با دو اسپیس دارند.

اپراتورها (Operators)

تمام اپراتورهای باینری (اپراتورهایی که بین دو مقدار (value) می آیند)، مانند +, -, =, !=, ==, > و غیره، برای راحت تر خوانده شدن، باید قبل و بعد از خود اسپیس داشته باشند. برای مثال بنویسیم ;foo = $bar$ و ننویسیم ;foo=$bar$. اپراتورهای Unary (آنهایی که فقط روی یک مقدار عمل می کنند)، مانند ++ نباید هیچ فاصله ای با متغیر یا عدد کناریشان داشته باشند.

Casting

در یک کست یک اسپیس بین (نوع) و متغیر قرار دهید. مانند زیر:

کد:
(int) $mynumber





Control Structures

که شامل if, for, while, switch و غیره هستند باید به شیوه زیر نوشته شوند:

کد:
if (condition1 || condition2) {


 action1;


}


elseif (condition3 && condition4) {


 action2;


}


else {


 defaultaction;


}


لطفا از «else if» استفاده نکنید و همیشه از «elseif» استفاده کنید. (این توصیه از «گایدلاین کدنویسی استاندارد دروپال» است. توجه کنید که گایدلاین ها مرتب در حال تغییر و بهبود هستند. آنها یک قانون مطلق نیستند. در گذشته گایدلاین کدنویسی استاندارد دروپال «else if» را به «elseif» ترجیح می داد.)

همان طور که در مثال بالا می بینید کلمات «if» و «elseif» یک اسپیس از پرانتز بعد از خود فاصله دارند تا با فراخوانی یک فاکنشن متفاوت باشند. فراخوانی یک فانکشن مانند مثال زیر:


کد:
print_my_name();


همیشه از علامت های آکولاد {} استفاده کنید. حتی زمانی که لازم نباشند. مثال زیر در جاوااسکریپت صحیح است اما استاندارد نیست:

کد:
if (condition1)


  statement1


else


  if (condition2)


     statement2


  else


     if (condition3)


...


کد بالا برای کسی که با این روش آشنایی ندارد، کمی گیج به نظر می رسد. استاندارد این است که همیشه از آکولاد استفاده کنید زیرا خوانایی کد را افزایش و احتمالا خطا را کاهش می دهد.

کامنت گذاری

تمام فایل ها باید در بالای کد کامنتی مشابه زیر داشته باشند. این کامنت برای نرم افزارهای مدیریت نسخه حیاتی است.

کد:
// $Id: backup_migrate.php,v 1.1.2.1.2.6 2010/03/24 04:02:58 ronan $

در این خط در ابتدا نام فایل قرار دارد. سپس ورژن آن (برای شروع ورژن را 1.0 بگذارید.) سپس زمانی که شما فایل را ساخته اید را وارد کنید. سپس نام خودتان را وارد کنید.

در ابتدای هر فایل یا فانکشن پیچیده ای باید از بلاک کامنت گذاری روش داکسیجن استفاده شود. مثلا:

کد:
/**


* Open a printer-friendly page and prompt for printing.


* @param tagID


*   The ID of the tag that contains the material that should


*   be printed.


*/


به این سیستم کامنت گذاری «بلاک کدنویسی، روش داکسیجن» می گویند. متون را می توانید به زبان انگلیسی یا پنگلیش بنویسید.

تمام قسمت های گیج کننده کد باید با روش های کد گذاری تک خطی توضیح داده شوند. مانند زیر:

کد:
// Some code come here.


/* Some other code here too. */

کامنت ها باید یک جمله کامل باشند و با نقطه تمام شوند.

باز هم تکرار می کنیم که رعایت نشدن موارد بالا در یک کد به معنای اشتباه بودن آن کد نیست، بلکه به معنای آن است که کد از این استاندارد پیروی نمی کند. شاید این کد از استاندارد دیگری پیروی کند یا هیچ استانداری مد نظرش نباشد. اما بدانید، کدی که استاندارد نباشد گرچه به خوبی کار می کند اما جایی در پروژه های بزرگ با تیم های چند نفره ندارد.

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

منبع
[عکس: <a href=www.Mojsazan.com.gif]" class="mycode_img" />
پاسخ
سپاس شده توسط
#2
«علامت استاندارد همچنان نشانه مرغوبیت کالاست» :)

همان طور که در قسمت اول گفتیم بسیار توصیه می شود که برنامه نویسان حتما از یک استاندارد هنگام کدنویسی استفاده کنند.
باز هم می گوییم استانداردهای آورده شده در این مقالات تنها استاندارد موجود نیستند. شما می توانید از استاندارد دیگری استفاده کنید. چیزی که بسیار اهمیت دارد این است که حتما از یک استاندارد استفاده کنید.
نکته دیگر راجع به کلمات «باید» در این مقاله است. منظور این است که اگر به این صورت عمل نکنید، نمی توانید بگویید که دارید تحت این استاندارد می نویسید. طبعا شما می توانید تحت استاندارد دیگری بنویسید، اما زمانی که قصد چنین کاری را داشتید «باید» مو به مو تمام دستورات آن استاندارد را رعایت کنید.

در این مقاله قصد داریم به ادامه استانداردهای گفته شده در مقاله قبل بپردازیم. پس در ادامه با ما باشید.

فراخوانی فاکنشن ها

بین نام فانکشن ها (function) و پرانتزهای آنها نباید اسپیس وجود داشته باشد. پارامترهای اول و آخر به پرانتزها می چسپند و کاما همیشه با پارامتر بعد از خود یک اسپیس فاصله دارد. مانند زیر:

$var = foo($bar, $baz, $quux);

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

$short = foo($bar);
$long_variable = foo($baz);


اعلان فانکشن ها

«موفقیت بیشتر با رعایت یکسری فانکشن ها و اصول اخلاقی بدست می آید تا آنکه به ذات انسان ها وابسته باشد.»
An Wang

فانکشن ها را به صورت زیر تعریف می کنیم. به اسپیس ها و فاصله گذاری ها توجه کنید:

function funstuff_system($field) {
$system["description"] = t("This module inserts funny text into posts randomly.");
return $system[$field];
}


آرایه ها (Arrays)

$some_array = array('hello', 'world', 'foo' => 'bar');

در صورتی که آرایه بزرگ است. به صورت زیر عمل کنید:

$form['title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#size' => 60,
'#maxlength' => 128,
'#description' => t('The title of your node.'),
);

(در کد بالا، بعد از آخرین مقدار (انتهای خط یکی مانده به آخر)، می توان علامت کاما را نگذاشت)

Quotes

توصیه می شود - تا آنجا که ممکن است - به جای استفاده از علامت (\):

'He\'s a good person.'

"He is a \"GOOD\" person."

از (' و ") به جای یکدیگر استفاده کنید:

"He's a good person."

'He is a "GOOD" person.'

استرینگ ها (Strings)

بهتر است همیشه بین نقطه (در PHP) یا + (در جاوااسکریپت) و استرینگ یک اسپیس فاصله باشد. مانند زیر:

<?php
$string = 'Foo' . $bar;
$string = $bar . 'foo';
$string = bar() . 'foo';
$string = 'foo' . 'bar';
?>

البته در PHP زمانی که از دابل کووت (“) استفاده می کنید، می توان به صورت زیر نیز عمل کرد:

<?php
$string = "Foo $bar";
?>

می توان برای جلوگیری از خطا های احتمالی از علامت آکولاد به صورت زیر استفاده کرد:

<?php
$string = "<div class='article-{$id}'>There is {$num} block{$s}.</div>";

$id = 3;
$num = 5;
$s = 's';
echo $string; // <div class='article-3'>There is 5 blocks.</div>

$id = 4;
$num = 1;
$s = '';
echo $string; // <div class='article-4'>There is 1 block.</div>
?>

در کد بالا، در خط دوم یک متغیر تعریف شده است که بر حسب مقدارهای (id، num و s) جملات متفاوتی را می سازد.

در بالا می بینید که با استفاده از آکولاد حتی اگر اسپیسی بین متغیر و استرینگ نباشد، خطایی پیش نمی آید. البته صورت زیر نیز درست است:

<?php
$string = "<div class='article-".$id."'>There is ".$num." block".$s.".</div>";
?>


Semicolons

گذاشتن نقطه ویرگول در انتهای جمله، در بعضی موارد اختیاری است (مانند جاوااسکرپیت یا مثال زیر در پی اچ پی)

<?php print $tax ?>

برای خوانایی بهتر و جلوگیری از خطاهای احتمالی توصیه می شود همیشه در انتهای جمله نقطه ویرگول بگذارید:

<?php print $tax; ?>


Example URLs

هنگامی که یک آدرس مثالی را می نویسید، از «example.com» استفاده کنید.

عادت های نام گذاری

«نام من باند است. جیمز باند.»
یان فلمینگ (نویسنده داستان های جیمز باند)

اهمیت زیادی دارد که نام های معنی دار برای فانکشن هایتان بگذارید. نامی مانند ()getAverageHeight یا ()get_avg_height اطلاعات بسیار بیشتری نسبت به ()calculate می دهد.

- هر چه محدوده استفاده از یک متغیر کوچک تر باشد نام آن نیز می تواند کوچکتر باشد. برای مثال اشکالی ندارد اگر در یک لوپِ for از متغیری با نام i به عنوان یک شمارش گر استفاده کنیم. مثال زیر:

for (i; i<9; i++) {
print i;
}

پس به عنوان یک قانون سر انگشتی: هر متغیری بامش بیش، برفش بیشتر و اسمش درازتر.

- بعضی از نام ها، مخفف های استاندارد و شناخته شده دارند، برای مثال max. پس زمانی که می نویسید maxLength عین این است که نوشته باشید maximumLength، فقط در این میان چند حرف کمتر تایپ کرده اید.

- نام هایی که با _ (underscore) و __ (two underscores) شروع می شوند برای فانکشن های از قبل تعریف شده کنار گذاشته می شوند و نباید چنین نام هایی بگذارید.

- در نام های چند حرفی دو روش معمول وجود دارد. استفاده از _ و حروف بزرگ. در PHP نام متغیرها و فانکشن ها را به این صورت (get_max_length) نام گذاری می کنیم.
در جاوااسکریپت کلمات را به صورت camel case (که گاهی StudlyCaps هم گفته می شد) نام گذاری می کنیم (getMaxLength).

- در روش camel case اگر یکی از قسمت ها، تمام حروف آن بزرگ است، باید به صورت زیر نوشته شود:

getHtmlPage // not getHTMLPage

زیرا ما از حروف بزرگ برای خوانا کردن نام استفاده می کنیم. اگر تمام حروف را بزرگ بنویسیم، خوانایی کم می شود.

موارد زیر خاص جاوااسکریپت هستند

تمام متغیرها در جاوااسکریپت باید با var اعلام شوند. به دو دلیل:
- متغیرهایی که با var اعلام نشوند، به صورت پیش فرض گلوبال خواهند بود.
- هنگام پیدا شدن باگ، باگ ها بسیار مبهم خواهند بود و حل آنها بسیار مشکل.

«اگر عیب یابی (debug) هنر حذف کردن باگ ها باشد، پس برنامه نویسی باید هنر ایجاد باگ باشد.»
نامشخص

می توانید از روش علامت گذاری مجارستانی (Hungarian notation method) استفاده کنید که یک روش نام گذاری است.

نام متغیری که مقدار آن Boolean است با b شروع می شود:

bIsRegistered

نام متغیرهایی که مقدار آنها عدد یا شماره است با c یا n (ابتدای حروف count و number) شروع می شوند:

cElements
nTages

نام متغیرهایی که مقدار آنها string است با s شروع می شود:

sFirstName

نام آرایه (Array) ها با a یا arr شروع می شود:

aNames
asNames

مثال دوم یک آرایه است که مقادیر آن string هستند. پس در ابتدای آن هم a داریم و هم s.

اندکس هر آرایه را با i شروع می کنیم:

aNames[iName]

row یا column هر table یک دیتابیس را با r یا c شروع می کنیم:

cAddress

حالت گلوبال یا member را با _g و _m نشان می دهیم: g_sName

توصیه های استاندارد نویسی این دو مقاله به پایان رسید. طبعا علاوه بر موارد بالا، گایدلاین های فراوان دیگری در زمینه استاندارد نویسی، می توانید پیدا کنید و بسیار توصیه می شود که حتما از یکی از آنها استفاده کنید.

کسی که کتاب های مفید نمی خواند با کسی که سواد خواندن ندارد، فرقی نمی کند.
Mark Twain
[عکس: <a href=www.Mojsazan.com.gif]" class="mycode_img" />
پاسخ
سپاس شده توسط


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  چرا هزینه های برنامه نویسی بالاست؟ مهرداد عباسی 0 2,131 04-21-2015, 04:58 AM
آخرین ارسال: مهرداد عباسی
  چرا هزینه های برنامه نویسی بالاست؟ مهدی ابراهیمی 0 2,982 06-27-2014, 11:34 PM
آخرین ارسال: مهدی ابراهیمی
  میوه فروشی بهتر است یا برنامه نویسی؟؟؟؟؟؟؟؟ مهرداد عباسی 11 13,165 02-17-2014, 05:05 PM
آخرین ارسال: مهدی ابراهیمی
Question انتخاب یک زبان جامع برنامه نویسی موبایل - اپلیکیشن - وب - هوش digicom 19 22,107 08-25-2013, 07:10 PM
آخرین ارسال: مهدی ابراهیمی
  آشنایی با نسخه بندی و چرخه انتشار نرم افزارها مهرداد عباسی 0 2,317 07-28-2013, 02:45 AM
آخرین ارسال: مهرداد عباسی
  خودآموز برنامه نویسی در ۱۰ سال علیرضا حر 0 3,180 06-21-2013, 05:16 AM
آخرین ارسال: علیرضا حر
  برنامه نویسی لینوکس aliye 5 5,996 02-22-2013, 03:31 PM
آخرین ارسال: Beni_Vanda
  کدام زبان برنامه‌ نویسی را یاد بگیریم؟ (راهنمای انتخاب زبان برنامه نویسی) مهرداد عباسی 0 3,537 09-22-2012, 07:06 PM
آخرین ارسال: مهرداد عباسی
  تاریخچه زبان های برنامه نویسی مهرداد عباسی 0 2,444 09-20-2012, 11:08 PM
آخرین ارسال: مهرداد عباسی
  مقایسه بین دو زبان برنامه نویسی؟ rector 6 7,882 08-14-2012, 03:10 PM
آخرین ارسال: kakolokia

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان