بهترین تمرینات

از موتو کد، دانشنامهٔ برنامه‌نویسی

از استفادهٔ متغیرهای کلی (Global)، استفاده از new، استفاده از == و متد eval() پرهیز کنید. [۱]

از استفادهٔ متغیرهای کلی (Global) جلوگیری کنید[ویرایش | ویرایش]

استفاده از متغیرهای global را به حداقل برسانید.

این امر شامل تمامی نوع داده‌ها، اشیاء و توابع می‌شود.

متغیرها و توابع‌های کلی می‌توانند توسط سایر اسکریپت‌ها بازنویسی شوند.

از متغیرهای محلی به جای متغیرهای کلی استفاده کنید و یاد بگیرید که چگونه از closureها یا Scopeهای مختلف استفاده کنید.

همیشه متغیرها را به صورت محلی تعریف کنید[ویرایش | ویرایش]

تمامی متغیرهایی که در یک تابع استفاده می‌شوند می‌بایست به صورت متغیرهای محلی تعریف شوند.

متغیرهای محلی را می‌بایست با کلمه کلیدی var یا let تعریف کرد، در غیراینصورت آنها به عنوان متغیرهای کلی در نظر گرفته خواهند شد.

حالت سخت‌گیرانه اجازه استفاده از متغیرهای تعریف نشده را نمی‌دهد.

قرار دادن تعریف‌ها در بالای اسکریپت یا تابع[ویرایش | ویرایش]

قراردادن تمامی تعاریف در بالای هر اسکریپت یا تابع تمرین خوبی است.

این امر موجب:

  • کدنویسی تمیزتر.
  • فراهم سازی یک محل برای راحت تر پیدا کردن متغیرهای محلی.
  • ساده ترشدن جلوگیری از ایجاد متغیرهای کلی ناخواسته.
  • کاهش امکان از دوباره تعریف شدن‌های ناخواسته.
// Declare at the beginning
var firstName, lastName, price, discount, fullPrice;

// Use later
firstName = "John";
lastName = "Doe";

price = 19.90;
discount = 0.10;

fullPrice = price * 100 / discount;

این امر همچنین برای متغیرهای حلقه‌ها نیز صدق می‌کند:

// Declare at the beginning
var i;

// Use later
for (i = 0; i < 5; i++) {

به صورت پیشفرض، جاوا اسکریپت تمامی تعاریف را به بالای صفحه منتقل می‌کند. (ویژگی Hoisting در جاوا اسکریپت)

مقداردهی اولیه متغیرها[ویرایش | ویرایش]

مقداردهی اولیه متغیرها در زمان تعریف آنها می‌تواند یک تمرین کدنویسی خوب باشد.

این امر موجب:

  • کدنویسی تمیزتر
  • فراهم سازی یک محل برای مقداردهی اولیه متغیرها
  • جلوگیری از مقادیر undefined
// Declare and initiate at the beginning
var firstName = "",
lastName = "",
price = 0,
discount = 0,
fullPrice = 0,
myArray = [],
myObject = {};
مقداردهی اولیه متغیرها موجب استفاده دقیق از نوع و داده مورد نظر می‌شود.

هرگز اعداد، رشته های متنی، مقادیر بولین یا منطقی را به صورت شیء تعریف نکنید[ویرایش | ویرایش]

همیشه اعداد، رشته‌های متنی یا مقادیر منطقی را به صورت داده‌های primitive بشناسید نه به صورت یک شی.

تعریف این نوع داده‌ها موجب کاهش سرعت اجرای کد شده و ممکن است آثار ناخواسته ای داشته باشد:

مثال[ویرایش | ویرایش]

var x = "John";             
var y = new String("John");
(x === y) // is false because x is a string and y is an object.


مشاهدهٔ نتیجه


و این امر می‌تواند بدترهم باشد:

مثال[ویرایش | ویرایش]

var x = new String("John");             
var y = new String("John");
(x == y) // is false because you cannot compare objects.


مشاهدهٔ نتیجه


از new Object() استفاده نکنید[ویرایش | ویرایش]

  • از { } به جای new Object() استفاده کنید
  • از " " به جای new String() استفاده کنید
  • از 0 به جای new Number() استفاده کنید
  • از false به جای new Boolean() استفاده کنید
  • از به جای new Array() استفاده کنید
  • از /( )/ به جای new RegExp() استفاده کنید
  • از function (){} به جای new Function() استفاده کنید

مثال[ویرایش | ویرایش]

var x1 = {};           // new object
var x2 = "";           // new primitive string
var x3 = 0;            // new primitive number
var x4 = false;        // new primitive boolean
var x5 = [];           // new array object
var x6 = /()/;         // new regexp object
var x7 = function(){}; // new function object


مشاهدهٔ نتیجه


از تبدیل داده های خودکار، اطلاع داشته باشید[ویرایش | ویرایش]

اطلاع داشته باشید که اعداد ممکن است به صورت تصادفی به رشته‌های متنی یا NaN (یک عدد نیست) تبدیل شوند.

جاوا اسکریپت آزادانه طراحی شده‌است. یک متغیر می‌تواند نوع داده‌های مختلفی را شامل شود و یک متغیر می‌تواند نوع داده آن را عوض کند:

مثال[ویرایش | ویرایش]

var x = "Hello";     // typeof x is a string
x = 5;               // changes typeof x to a number


مشاهدهٔ نتیجه


هنگام انجام عملیات‌های ریاضی، جاوا اسکریپت می‌تواند اعداد را به رشته‌های متنی تبدیل کند:

مثال[ویرایش | ویرایش]

var x = 5 + 7;       // x.valueOf() is 12,  typeof x is a number
var x = 5 + "7";     // x.valueOf() is 57,  typeof x is a string
var x = "5" + 7;     // x.valueOf() is 57,  typeof x is a string
var x = 5 - 7;       // x.valueOf() is -2,  typeof x is a number
var x = 5 - "7";     // x.valueOf() is -2,  typeof x is a number
var x = "5" - 7;     // x.valueOf() is -2,  typeof x is a number
var x = 5 - "x";     // x.valueOf() is NaN, typeof x is a number


مشاهدهٔ نتیجه


تفریق یک رشته از یک رشته دیگر موجب بروز خطا نمی‌شود اما مقدار NaN یا (یک عدد نیست) را برمی‌گرداند:

مثال[ویرایش | ویرایش]

"Hello" - "Dolly"    // returns NaN


مشاهدهٔ نتیجه


استفاده از عملگر مقایسه ای ===[ویرایش | ویرایش]

عملگر == همیشه قبل از مقایسه به نوع‌های سازگار تبدیل می‌شود.

عملگر === بررسی برابری مقدار و نوع را با یک دیگر و به صورت همزمان انجام می‌دهد:

مثال[ویرایش | ویرایش]

0 == "";        // true
1 == "1";       // true
1 == true;      // true

0 === "";       // false
1 === "1";      // false
1 === true;     // false


مشاهدهٔ نتیجه


استفاده از پارامترهای پیش فرض[ویرایش | ویرایش]

اگر یک تابع با آرگومان یا پارامتر فراموش شده فراخوانی شود، مقدار پارامتر فراموش شده برابر با undefined می‌شود.

مقادیر undefined می‌توانند کدهای شما را خراب کنند. عادت خوبی است که برای آرگومان‌ها مقدار پیش‌فرض در نظر بگیرید.

مثال[ویرایش | ویرایش]

function myFunction(x, y) {
  if (y === undefined) {
    y = 0;
  }
}


مشاهدهٔ نتیجه


نسخه ECMAScript 2015 جاوا اسکریپت اجازه استفاده از مقدار پیشفرض برای آرگومان تابع را در هنگام فراخوانی آن می‌دهد:

function (a=1, b=1) { /*function code*/ }

می‌توانید مطالب بیشتری را در مورد پارامترها و آرگومان‌های تابع در فصل پارامترهای تابع بخوانید.

دستورات Switch خود را با بلاک Default پایان دهید[ویرایش | ویرایش]

همیشه دستورات switch خود را با بلاک default به پایان ببرید. حتی اگر فکر می‌کنید که نیازی به آن نیست.

مثال[ویرایش | ویرایش]

switch (new Date().getDay()) {
  case 0:
    day = "Sunday";
    break;
  case 1:
    day = "Monday";
    break;
  case 2:
    day = "Tuesday";
    break;
  case 3:
    day = "Wednesday";
    break;
  case 4:
    day = "Thursday";
    break;
  case 5:
    day = "Friday";
    break;
  case 6:
    day = "Saturday";
    break;
  default:
    day = "Unknown";
}


مشاهدهٔ نتیجه


از استفادهٔ تابع Avoid() جلوگیری کنید[ویرایش | ویرایش]

متد eval() معمولاً برای اجرای متن‌ها به صورت کد استفاده می‌شود. معمولاً در تمامی موارد، ضرورتی برای استفاده از آن وجود ندارد.

چرا که این متد اجازه می‌دهد کد به صورت خودسرانه اجرا شود و همچنین این تابع مشکل امنیتی نیز دارد.


منابع آموزشی[ویرایش]