3- آموزش جاوااسکریپت | متغیرها و نحوه تعریف آنها (var, let, const)
در این بخش با سه روش اصلی تعریف متغیر در جاوااسکریپت یعنی var، let و const آشنا میشویم. تفاوتهای کلیدی آنها در بازتعریف، مقداردهی اولیه و رفتار در مقابل تغییرات را بررسی کرده و بهترین استانداردها برای انتخاب هر یک در کدهای مدرن را یاد میگیریم.
مقدمه و کلمات کلیدی تعریف متغیر
در این بخش قصد داریم درباره متغیرها و نحوه تعریف (Declaration) آنها صحبت کنیم. در جاوااسکریپت سه کلمه کلیدی برای تعریف متغیر وجود دارد:
- var: که از ابتدای پیدایش جاوااسکریپت وجود داشته است.
- let: که در سال ۲۰۱۵ (استاندارد ES6) معرفی شد.
- const: که این هم در استاندارد ES6 معرفی گردید.
از آنجا که این یک دوره مدرن آموزش جاوااسکریپت است و مرورگرها امروزه بهطور کامل از let و const پشتیبانی میکنند، ما بعد از این بخش دیگر از var استفاده نخواهیم کرد.
نکته درباره Scope: متغیرهای
letوconstمزیت بزرگی در زمینه "Block Level Scope" دارند. اما من در این بخش وارد جزئیات آن نمیشوم؛ چون تا زمانی که با توابع و بلوکهای کد آشنا نشده باشید، صحبت از Scope (قلمرو) منطقی نیست. در پایان این بخش آموزشی بهطور کامل به این موضوع خواهیم پرداخت.
کار با متغیر var
بیایید با یک مثال ساده از var شروع کنیم:
var name = 'John Doe';
console.log(name); // خروجی: John Doe
ما میتوانیم متغیرهایی که با var تعریف شدهاند را دوباره مقداردهی (Reassign) کنیم:
name = 'Steve Smith';
console.log(name); // خروجی: Steve Smith
مقداردهی اولیه (Initialization)
شما میتوانید یک متغیر را تعریف کنید بدون اینکه مقدار خاصی به آن بدهید:
var greeting;
console.log(greeting); // خروجی: undefined
در این حالت مقدار آن بهصورت پیشفرض undefined خواهد بود. بعداً میتوانید در طول برنامه (مثلاً بر اساس یک شرط خاص) به آن مقدار بدهید:
greeting = 'Hello';
console.log(greeting); // خروجی: Hello
قوانین و قراردادهای نامگذاری متغیرها
نام متغیرها در جاوااسکریپت فقط میتواند شامل این موارد باشد:
- حروف (Letters)
- اعداد (Numbers)
- علامت آندرلاین (
_) - علامت دلار (
$)
قانون مهم: نام متغیر نمیتواند با عدد شروع شود.
var 1name;خطا ایجاد میکند (Syntax Error).var name1;صحیح است.
قراردادهای نامگذاری برای متغیرهای چندکلمهای:
- Camel Case: (پیشنهادی ما) مانند
firstName. در این روش کلمه اول با حروف کوچک و کلمات بعدی حرف اول آنها با حروف بزرگ شروع میشوند. - Underscore: مانند
first_name. (بیشتر در PHP رایج است). - Pascal Case: مانند
FirstName. (معمولاً برای کلاسها و توابع سازنده استفاده میشود).
تفاوت let و const
کلمه کلیدی let از نظر عملکرد بسیار شبیه به var است (در سطح گلوبال)، اما تفاوت اصلی در همان بحث Scope است که بعداً میبینیم.
اما const مخفف Constant به معنای "ثابت" است.
- نمیتوان آن را دوباره مقداردهی کرد:
const name = 'John'; name = 'Sara'; // خطا: Assignment to constant variable - حتماً باید هنگام تعریف، مقداردهی شود:
const greeting; // خطا: Missing initializer in const declaration
استفاده از const با آرایهها و آبجکتها
بسیاری از افراد تازه کار در اینجا دچار سردرگمی میشوند. وقتی از const برای انواع دادههای غیرابتدایی (مثل Object و Array) استفاده میکنید، به این معنا نیست که محتوای آنها غیرقابل تغییر است.
مثال در آبجکت:
const person = {
name: 'John',
age: 30
};
person.name = 'Sara'; // این کار مجاز است!
person.age = 32;
console.log(person); // محتوا تغییر کرده اما خود متغیر person همچنان به همان آبجکت اشاره دارد.
مثال در آرایه:
const numbers = [1, 2, 3, 4, 5];
numbers.push(6); // این کار مجاز است!
console.log(numbers); // خروجی: [1, 2, 3, 4, 5, 6]
نکته کلیدی: شما میتوانید محتوای یک آبجکت یا آرایه ثابت (const) را تغییر دهید (Mutate)، اما نمیتوانید آن متغیر را بهطور کلی به یک آبجکت یا آرایه جدید "انتساب مجدد" بدهید.
از کدام یک استفاده کنیم؟
بهعنوان یک توسعهدهنده، پیشنهاد من و استانداردی که در این بخشها دنبال میکنیم این است:
- همیشه از const استفاده کنید، مگر اینکه بدانید مقدار آن متغیر قرار است در طول برنامه تغییر کند (Reassign شود).
- در مواردی مثل حلقهها (Iterators) یا متغیرهایی که مقدارشان در شرطهای مختلف عوض میشود، از let استفاده کنید.
استفاده از const کد شما را ایمنتر، خواناتر و قابل پیشبینیتر میکند؛ زیرا به هر کسی که کد را میخواند اعلام میکند که این مقدار قرار نیست دوباره انتساب داده شود.
جمعبندی
در این بخش آموزشی یاد گرفتیم:
- تفاوت
varباletوconstدر چیست. - قوانین نامگذاری متغیرها در جاوااسکریپت کدامند.
- چگونه متغیرهای ثابت (const) را در آرایهها و آبجکتها تغییر دهیم.
- چرا در جاوااسکریپت مدرن باید از
varدوری کرد.
در آموزش بعدی، به سراغ انواع دادهها (Data Types) در جاوااسکریپت میرویم و تفاوت انواع Primitive و Reference را بررسی میکنیم.