بیشتر اوقات توی یک برنامه جاوا اسکریپتی با اطلاعات سر و کار داریم مثلا :
متغیر های برای نگهداری اطلاعات استفاده میشن
متغیر یه حافظه نام گذاری شده هست که برای نگهداری اطلاعات میتونیم ازش استفاده کنیم
برای ساختن یک متغیر توی جاوا اسکریپت از کلمه let استفاده کنین
دستور زیر یه متغیر رو با نام message تعریف میکنه :
let message;
حالا ما میتونیم یه سری اطلاعات رو با عملگر = بریزیم توش
let message; message = 'Hello'; // یه رشته رو نگهداری میکنه
حالا این متغیر تو حافظه ذخیره شده میتونیم با استفاده از نامش بهش دسترسی داشته باشیم:
let message; message = 'Hello!'; alert(message); // محتوای متغیر رو نشون میده
میتونیم خلاصه تر هم بنویسیم یعنی مراحل تعریف کردن و مقداردهی رو توی یک خط انجام بدیم :
let message = 'Hello!'; // تعریف کردن متغیر و مقدار دادن alert(message); // Hello!
همچنین میتونیم چند تا متغیر رو توی یک خط تعریف کنیم :
let user = 'John', age = 25, message = 'Hello';
اینجوری کوتاه تر به نظر میرسه، ولی توصیه نمیشه اینجوری استفاده کنین و خوانایی کد رو پایین میاره بهتره که هر متغیر رو توی یک خط تعریف کنین
چند خطی نوشتن طولانی تره اما خوندنش راحت تره:
let user = 'John'; let age = 25; let message = 'Hello';
بعضیا چند تا متغیر رو اینجوری چند خطی تعریف میکنن:
let user = 'John', age = 25, message = 'Hello';
یا ویرگول رو اولش میذارن :
let user = 'John' , age = 25 , message = 'Hello';
از نظر فنی همه اینا یه کار انجام میدن و انتخاب این که از کدوم مدلش استفاده کنین سلیقهای هست و شخصیه
توی اسکریپت های قدیمی شاید کلمه var رو به جای let دیده باشین :
var message = 'Hello';
کلمه var تقریبا مثل let هست و متغیر تعریف میکنه اما یکم فرق میکنه و روش قدیمی هست
تفاوت های ریزی بین let و var هست اما هنوز برای ما مهم نیست توی فصل «var قدیمی» به طور مفصل توضیح میدیمش
برای درک بهتر متغیرها یه جعبه رو تصور کنین که برای نگهداری اطلاعات هست و یه نام منحصر به فرد داره که روی جعبه نوشته شده
برای نمونه، متغیر message رو میتونین یه برچسب در نظر بگیرین که روی جعبه زده شده و مقدار داخلش هم hello هست :
میتونیم هر داده دیگهای داخل این جعبه قرار بدیم
همچنین میتونیم هر چند بار که خواستیم تغییرش بدیم :
let message; message = 'Hello!'; message = 'World!'; // مقدار متغیر اینجا تغییر کرد alert(message);
وقتی که مقدار متغیر عوض میشه اطلاعات قبلیش پاک میشه :
همچنین میتونیم دو تا متغیر تعریف کنیم و اطلاعات رو از یکی به دیگری کپی کنیم
let hello = 'Hello world!'; let message; // copy 'Hello world' from hello into message message = hello; // حالا دو تا متغیر اطلاعات یکسانی دارن alert(hello); // Hello world! alert(message); // Hello world!
دوبار تعریف کردن باعث ایجاد خطا میشه، یه متغیر فقط یه بار باید تعریف بشه تعریف دوباره متغیری که قبلا تعریف شده خطا میده:
let message = "This" // repeated 'let' leads to an error let message = "That" // اینجا ارور میده که از قبل تعریف شده
پس باید متغیر رو یه بار تعریف کنیم و برای اشاره کردن بهش از let استفاده نکنیم
زبانهای رویهای(Functional)
جالبه بدونین زبانهای functional مثل Scala یا Erlang تغییر مقدار متغیر رو ممنوع کردن
توی این نوع زبانها وقتی مقداری رو توی جعبه قرار میدیم تا ابد اونجا میمونه و اگه بخوایم مقدار دیگهای رو ذخیره کنیم، ما رو مجبور میکنن تا جعبهی جدید بسازیم
اگرچه توی نگاه اول این زبانها عجیب به نظر میان، ولی کاملا توانایی توسعه (توی پروژههای) جدی رو دارن مهمتر از اون توی زمینههایی مثل محاسبات موازی (Parallel Computation) این محدودیتها تبدیل به مزیت میشن مطالعهی این زبانها (حتی اگه به این زودی قصد استفاده از اونا را ندارین) برای وسیع شدن دیدتون، توصیه میشه
دو تا محدودیت برای نامگذاری متغیرها توی جاوا اسکریپت وجود داره:
یه مثال از نامگذاری درست :
let userName; let test123;
وقتی که یک نام چند کلمه داره، عموما از روش camelCase استفاده میکنیم به این صورت که کلمات یکی بعد از دیگری پشت هم نوشته میشن و حرف اول هر کلمه کاراکتر بزرگ هست : myVeryLongName .
همینطور از $ و _ هم میشه استفاده کرد. معنی خاصی ندارن و مثل حروف قابل استفاده هستن
let $ = 1; //تعریف یک متغیر با : "$" let _ = 2; // تعریف یک متغیر با : "_" alert($ + _); // 3
let 1a; // نمیتونه با عدد شروع بشه let my-name; // علامت منفی (خط تیره) نباید استفاده بشه
متغیر apple و AppLE دو تا متغیر جداگانه هستن و یکی نیستن
حروف غیر انگلیسی هم مجازه ولی توصیه نمیشه
let имя = '...'; let 我 = '...';
از نظر فنی اینا درست کار میکنن ولی بر اساس یک رسم بینالمللی برای نام متغیرها از زبان انگلیسی استفاده میشه حتی اگه اسکریپت کوچیکی مینویسیم، ممکنه تا مدت طولانیای مورد استفاده و توسعه قرار بگیره و افرادی از بقیه کشورها ممکنه نیاز باشه روزی اون اسکریپت رو بخونن
تعدادی نام رزرو شده وجود داره که نمیشه از اونا برای نام متغیرها استفاده کرد برای این که اونا توسط خودِ زبان جاوا اسکریپت استفاده شدن
مثلا let، class، return و function رزرو شده هستن
این کد خطای دستوری میده:
let let = 5; /* نمیشه نام یه متغیر رو let گذاشت */ let return = 5; /* همچنین نمیشه نامش رو return گذاشت */
قبلا این امکان وجود داشت تا متغیری رو بدون استفاده از let و صرفا با مقدار دهی تعریف کرد درصورتیکه از use strict استفاده نکنیم، این امکان همچنان وجود داره
توی این مثال از use strict استفاده نشده:
num = 5; /* متغیر num اگه وجود نداشته باشه ایجاد میشه */ alert(num); // 5
این روش مناسب نیست و در صورت وجود use strict با خطا مواجه خواهد شد:
"use strict" num = 5; /* ارور : متغیر num تعریف نشده! */
برای تعریف کردن یک ثابت (متغیر هایی که مقدارشون غیر قابل تغییره) از کلمه const به جای let استفاده کنین:
const myBirthday = '18.04.1982';
متغیر هایی که با کلمه const تعریف میشن رو ثابت میگیم بهشون ثابتها دوباره قابل مقدار دهی نیستن و اگه سعی کنیم اونا رو تغییر بدیم به خطا میخوریم:
const myBirthday = '18.04.1982'; myBirthday = '01.01.2001'; // ارور میده چون نمیشه مقدار ثابت رو تغییر داد
وقتی یه برنامه نویس مطمئنه که متغیر هیچوقت عوض نمیشه میتونه اونو به عنوان ثابت تعریف کنه
به صورت یک عُرفِ همهگیر، از ثابتهای با حروف بزرگ به عنوان نام مستعار برای مقادیری که به خاطر سپردن اونا دشواره، استفاده میشه. این دسته از ثابتها اصطلاحا prior to execution (پیش از اجرای برنامه) مقدارشون قطعیه
توی ثابتها از حروف بزرگ و _ استفاده میشه :
const COLOR_RED = "#F00" const COLOR_GREEN = "#0F0" const COLOR_BLUE = "#00F" const COLOR_ORANGE = "#FF7F00" // ... ما نیاز داریم یه رنگ انتخاب کنیم let color = COLOR_ORANGE; alert(color); // #FF7F00
ثابت بودن یک متغیر صرفا به این معنیه که مقدار اون تغییر نخواهد کرد. یک دسته از ثابتها قبل از اجرای برنامه مقدارشون قطعی خواهد بود و دسته دیگه در حین اجرای (Run Time) برنامه مقدارشون مشخص میشه (و دیگه مقدارشون تغییر نمیکنه)
برای نمونه :
const pageLoadTime = /* زمانی که طول کشیده تا صفحه وب بارگذاری بشه*/;
مقدار ثابت pageLoadTime قبل از اجرای برنامه مشخص نبوده و به همین دلیل به صورت عادی نوشته شده اما هنوز یک ثابته چون که بعد از مقداردهی تغییر نمیکنه
ثابتهای با حروف بزرگ زمانی که اصطلاحا مقداری به صورت "hard code" شده داریم، استفاده میشه (مثل کد رنگ قرمز)
لطفا نام متغیرهای خودتونو با حساسیت انتخاب کنین و برای اینکار خوب فکر کنین
انتخاب نام برای متغیرها یکی از کارهای مهم و پیچیده توی برنامهنویسیه یک نگاه سریع به نام متغیرها میتونه تفاوت یک برنامهنویس تازهکار و با تجربه را نشان بده
توی پروژههای واقعی، بجای از صفر نوشتن برنامهها، بیشتر زمان صرف اصلاح و توسعه کدهای موجود میشه. وقتی بعد از مدتی به کدهای قبلی برمیگردیم، بدست آوردن اطلاعات از کدهایی که نامگذاریهای خوبی دارن خیلی راحتتره (منظور متغیرهاییه که نامهای خوبی دارن)
لطفا قبل از انتخاب نام برای یک متغیر خوب بهش فکر کنین نتیجهاش رو حتما میبینین
از نامهایی که برای انسان قابل فهم است استفاده کنید مانند userName یا shoppingCart
از نامهای مخفف یا کوتاه استفاده نکنین مثل a، b، c، مگه اینکه بدونین چیکار دارین میکنین
نامهای کاملا واضح و مختصر انتخاب کنین نمونههایی از نامهای بد data و value هستن این نامها هیچچیزی رو توضیح نمیدن. استفاده از این مدل نامها فقط زمانی قابل قبوله که محتوای کدی که مینویسین استثنا مشخص کنه که data یا value به چه چیزی اشاره میکنه
با ذهن خود و تیم کاریتان توافق نظر داشته باشین اگر به مخاطبان وبسایتتون user میگین، متغیرهای مرتبط رو به جای currentVisitor یا newManInTown باید currentUser یا newUser نامگذاری کنین
به عنوان آخرین نکته بعضی از برنامهنویسای تنبل بجای تعریف متغیرهای جدید، از متغیرهای موجود دوباره استفاده میکنن
در نتیجه متغیرهای اونا مثل جعبهایه که افراد متفاوت چیزهای مختلفی توش ریختن و نام روی برچسب اونا رو تغییر ندادن، این دسته از برنامهنویسان در تعریف متغیر مقداری صرفهجویی میکنن، ولی مدت زمان زیادی از زمان رفع خطاها رو افزایش میدن
بهینهسازیهایی که توی مرورگرهای امروزی و همینطور کمحجمکنندههای جاوا اسکریپت صورت میگیره، در بوجود نیامدن مشکلات عملکردی (Performance) برنامههای ما کمک میکنن حتی استفاده از متغیرهای مختلف برای مقادیر مختلف به موتور جاوا اسکریپت کمک میکنه تا کد شما رو بهینه کنه
اگر توی این مقاله مشکلی بود یا خواستین توی این پروژه مشارکت کنین این لینک گیتهابش هست.