۳ دسامبر ۲۰۲۲

متغیرها

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

  1. یک فروشگاه آنلاین – اطلاعات ممکن است شامل كالاهایی شود که فروخته می‌شوند و در سبد خرید هستند.
  2. یک نرم‌افزار چت – اطلاعات ممکن است شامل کاربران، پیام‌ها و دیگر موارد شود.

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

متغیر

یک متغیر (variable) “حافظه‌ای نام گذاری شده” برای داده است. ما می‌توانیم از متغیرها برای ذخیره کالاها، بازدید کننده‌ها و داده‌های دیگر استفاده کنیم.

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

عبارت زیر یک متغیر با نام “message” می‌سازد (یا به عبارتی دیگر: تعریف می‌کند):

let message;

حالا می‌توانیم اطلاعاتی را از طریق عملگر = در این متغیر قرار دهیم :

let message;

message = 'Hello'; // ذخیره کن message را در متغیر «Hello» رشته

حال رشته‌ای که نوشتیم در بخشی از حافظه کامپیوتر که در اختیار این متغیر می‌باشد ذخیره شده است. ما می‌توانیم با استفاده از اسم متغیر به آن دسترسی داشته باشیم:

let message;
message = 'سلام!';

alert(message); // محتوای متغیر را نشان می‌دهد

برای اختصار می‌توانیم تعریف متغیر و مقداردهی به آن را در یک خط قرار دهیم :

let message = 'Hello!'; // متغیر را تعریف کن و مقداردهی کن

alert(message); // !سلام

همینطور می‌توانیم چند متغیر را در یک خط تعریف کنیم :

let user = 'John', age = 25, message = 'سلام';

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

تعریف کردن در چند خط کمی طولانی‌تر است، اما برای خواندن راحت تر است:

let user = 'John';
let age = 25;
let message = 'سلام';

بعضی از برنامه‌نویسان متغیرهای متعدد را به این صورت در چند خط می‌نویسند:

let user = 'John',
  age = 25,
  message = 'سلام';

…یا حتی به صورت “comma-first” اینکار را انجام می‌دهند:

let user = 'John'
  , age = 25
  , message = 'Hello';

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

var بجای let

در اسکریپت‌های قدیمی ممکن است بجای کلیدواژه let با کلیدواژه var برخورد کنید :

var message = 'سلام';

کلیدواژه var تقریبا* با* let یکسان است. آن هم یک متغیر را تعریف می‌کند، ولی روش کار آن قدیمی است.

تفاوت‌های کوچکی بین این دو وجود دارد که در حال حاضر به آن نمی‌پردازیم. در مبحث ‌کلمه‌ی "var" قدیمی با جزییات به آن خواهیم پرداخت.

یک مقایسه‌ی واقعی

برای درک مفهوم متغیر، می‌توانیم آن را یک جعبه برای نگهداری اطلاعات تصور کنیم، که یک نام منحصربه‌فرد روی آن چسبانده‌ایم.

برای نمونه، تصور کنید متغیر “message” در جعبه‌ای با برچسب message و با مقدار “سلام!” داخل آن وجود دارد:

ما می‌توانیم هر مقداری در آن قرار دهیم.

همینطور می‌توانیم هر چند بار که خواستیم این مقدار را تغییر دهیم:

let message;

message = 'سلام!';

message = 'World!'; // مقدار تغییر کرد

alert(message);

وقتی مقدار تغییر کرد، اطلاعات قبلی از آن پاک خواهند شد:

ما همینطور می‌توانیم دو متغیر تعریف کرده و اطلاعات یکی را در دیگری کپی کنیم.

let hello = 'سلام دنیا!';

let message;

// کپی کن message در hello مقدار «سلام دنیا» را از
message = hello;

// حالا هر دو متغیر یک مقدار دارند
alert(hello); // !سلام دنیا
alert(message); // !سلام دنیا
دوبار تعریف کردن باعث ارور می‌شود

یک متغیر باید فقط یک بار تعریف شود.

تعریف دوباره یک متغیر سبب ایجاد ارور می‌شود:

let message = "این";

// منجر به خطا می‌شود `let` تکرار کردن
let message = "آن"; // SyntaxError: Identifier 'message' has already been declared

بنابراین، ما باید متغیر را یک بار تعریف کنیم و سپس بدون let به آن رجوع کنیم.

زبان‌های Functional

جالب است بدانید زبان‌های تمام functional (تمام تابع‌محور) مانند Haskell وجود دارند که تغییر مقدار متغیر را ممنوع کرده است.

در این نوع زبان‌ها، یک بار که مقداری را “در جعبه” قرار می‌دهیم، تا ابد آنجا می‌ماند. اگر بخواهیم مقداری دیگر را ذخیره کنیم، زبان ما را مجبور می‌کند تا جعبه‌ای جدید بسازیم (متغیر جدیدی تعریف کنیم). نمی‌توانیم از متغیر قدیمی استفاده کنیم.

اگرچه در نگاه اول این زبان‌ها عجیب به نظر می‌رسند، ولی کاملا توانایی توسعه پروژه‌های جدی را دارند. مهم‌تر از آن، در زمینه‌هایی مانند محاسبات موازی (Parallel Computation) این محدودیت‌ها تبدیل به مزیت می‌شوند.```

نام‌گذاری متغیرها

دو محدودیت برای نام‌گذاری متغیرها در جاوااسکریپت وجود دارد:

  1. نام باید فقط از حروف، اعداد یا علامت $ و _ تشکیل شده باشد.
  2. اولین کاراکتر نمی‌تواند عدد باشد.

مثال‌هایی از نام‌های قابل قبول:

let userName;
let test123;

زمانی‌ که یک نام متشکل از چند کلمه است، عموما از روش camelCase استفاده می‌شود. به این صورت که کلمات یکی پس از دیگری پشت هم نوشته می‌شوند و حرف اول هر کلمه (به جز حرف اول کلمه اول) به حرف بزرگ است: myVeryLongName.

همینطور از '$' و '_' نیز می‌توان استفاده کرد. آنها فقط علامت هستند و معنی خاصی ندارند و همانند حروف قابل استفاده هستند.

این نام‌ها معتبر هستند :