متغیرها (Variables) و ثابت ها (Constants) از پایه ای ترین مباحث در زبان جاوا اسکریپت و نیز سایر زبان های برنامه نویسی هستند. در این مطلب ابتدا به مفهوم متغیر و در ادامه آن به مفهوم ثابت می پردازم.
خیلی ساده اینکه از متغیر ها برای ذخیره سازی و نگهداری موقت داده (Data)ها در حافظه کامپیوتر استفاده می کنیم. یعنی اینکه داده رو در مکانی مشخص از حافظه قرار داده و به اون مکان مشخص از حافظه یک نام یا اصطلاحا شناسه اختصاص می دهیم. نامگذاری بهمون این امکان رو میده که در برنامه مون هر وقت به داده های ذخیره شده در حافظه احتیاج پیدا کردیم بتونیم اون ها رو فراخوانی کرده و به مقدارشون دسترسی داشته باشیم.
برای اینکه مفهوم متغیر بیشتر براتون روشن بشه یک مثال براتون می زنم.فرض کنید که دارید لوازم منزلتون رو برای جابجایی به یک ساختمون جدید با کارتن های مختلف بسته بندی می کنید. هر کارتن نقش یک مکان از حافظه کامپیوتر رو داره. احتمالا شما برای اینکه بتونید بعد اسباب کشی وسایلتون رو راحت پیدا کنید به هر کارتن یک برچسب می زنید و نامگذاریش می کنید. این برچسب ها هم نقش نام متغیرها رو دارن. وسایلی که داخل هر کارتن قرار می گیره هم نقش مقداری رو داره که به یک متغیر اختصاص می دهیم یعنی همون داده ( Data)ها. حالا ببنیم متغیرها در کدنویسی به چه صورت هستند.
توجه: اگه خوب یادتون باشه در فصل قبل یک پروژه ساده ایجاد کرده بودیم. در اون پروژه یه پوشه درست کردیم به اسم js-basics و داخل اون هم دو تا فایل ایجاد کرده بودیم: index.html و index.js. داخل فایل index.html هم به فایل index.js ارجاع داده بودیم. حالا برای تمرین کدهای این قسمت کافیه تا محتوای داخل فایل index.js رو پاک کنید و کدهای این جلسه رو داخلش بنویسید.
تا قبل از انتشار جاوا اسکریپت نسخه ES6 برای تعریف یک متغیر از کلمه کلیدی var استفاده می شد. اما استفاده از var برای تعریف یک متغیر ممکن است مشکلاتی را به همراه داشته باشد که در آینده بدان می پردازم. به همین علت از نسخه ES6 به بعد بهترین روش (Best Practice) برای تعریف یک متغیر در جاوا اسکریپت استفاده از کلمه کلیدی let می باشد:
let name;
بعد از let نام متغیر را می آوریم. در این مثال متغیرمان رو name نامگذاری کردیم. حالا از متغیری که تعریف کردید یک خروجی در کنسول بگیرید:
console.log(name);
تغییرات را ذخیره کرده و مطابق پست آموزشی جاوا اسکریپت در مرورگرها، برنامه رو اجرا کنید و کنسول مرورگر را باز کنید و به خروجی توجه کنید. مقدار undefined را در خروجی مشاهده خواهید کرد پس:
نکته: به طور پیش فرض هر متغیری را که در جاوا اسکریپت تعریف می کنیم مقدار اولیه اش برابر با undefined می باشد.
می توانید مقدار پیش فرض متغیریکه تعریف می کنید را تغییر داده و اصطلاحا آن را مقدار دهی اولیه (Initialization) کنید:
let name = 'Ali'; console.log(name);
حتما از فصل قبل به یاد دارید که مقادیر رشته ای (String Literal) را باید بین کاراکترهای ' ' یا " " قرار دهید. به عنوان بهترین روش توصیه می شود برای تعریف مقادیر رشته ای از کاراکترهای ' ' استفاده نمائید. حالا اگر تغییرات را ذخیره کنید و به کنسول مرورگر بروید مقدار Ali را در خروجی خواهید دید.
let lastName = 'Taghani';
برای نوشتن نام متغیر در این مثال از قرارداد Camel Notation استفاده شده است. طبق این قرارداد (Convention) بایستی حرف اول نخستین کلمه با حرف کوچک انگلیسی و حرف اول مابقی کلمات با حرف بزرگ انگلیسی نوشته شود.
let lastName = 'Taghani';
let LastName = 'Taghani';
در این مثال هر چند مقدار هر دو متغیر برابر با رشته Taghani می باشد اما در حقیقت دو متغیر متفاوت هستند و به دو مکان جداگانه در حافظه اشاره می کنند. اگر قرارداد Camel Notation را در نامگذاری ها رعایت کنیم با این مشکل مواجه نخواهیم شد.
برای تعریف چند متغیر، دو روش وجود دارد که یکی از آن ها به عنوان بهترین روش توصیه می شود:
let firstName, lastName = 'Taghani';
همانطور که مشاهده می کنید یکبار از کلمه کلیدی let برای همه متغیرها استفاده نمودیم. همچنین می توانیم به متغیری مقدار اولیه بدهیم یا اینکه نه مقدارش همان مقدار پیش فرض undefined باشد.
let firstName;
let lastName = 'Taghani';
خود کلمه های ثابت و متغیر گویای این دو مفهوم در برنامه نویسی هستند و لذا چیز پیچیده ای نیستند. اما برای توضیح مفهوم ثابت در جاوا اسکریپت با یک مثال شروع می کنم. در فایل index.js متغیری را برای ذخیره داده ای به نام نرخ بهره تعریف کرده و آن را مقدار دهی اولیه کنید:
let interestRate = 0.3;
مقدار اولیه یک متغیر رو می توانیم هر جا و هر وقت که نیاز باشد دوباره تغییر بدهیم لذا اگر مقدار این متغیر را برابر با عدد 1 قرار دهیم و یک لاگ از آن بگیریم مقدار 1 را در کنسول خواهیم دید نه عدد 0.3 را:
interestRate = 1;
console.log(interestRate);
اما در برنامه هاییکه توسعه می دهیم، حالت هایی هستند که نمی خواهیم مقدار اولیه ایکه به یک داده اختصاص می دهیم، قابل تغییر باشد چرا که در اثر تغییر مقدار آن ممکن است خطاهای متعددی در برنامه ایجاد شوند. اگر با چنین حالتی روبرو شدید حتما بایستی به جای متغیر از ثابت استفاده کنید.
برای تعریف یک مقدار از نوع ثابت کافیست به جای کلمه کلیدی let از کلمه کلیدی const استفاده نمایید:
const interestRate = 0.3;
حالا سعی کنید مقدار این ثابت را تغییر دهید و سپس یک لاگ از آن گرفته و خروجی را در کنسول مشاهده کنید:
interestRate = 1;
console.log(interestRate);
حالا اگر به کنسول مرورگر بروید خواهید دید که یک خطا رخ داده است:
این خطا از نوع Uncaught TypeError می باشد و همانطور که از توضیح خود خطا پیداست، در اثر تغییر مقدار یک ثابت رخ داده است. همچنین اگر دقت کنید مشاهده می کنید (index.js:2) که خود خطا می گوید به خاطر کدام خط از کدام فایل است. در این مثال، خطا در خط دوم فایل index.js ایجاد شده است که اگر روی آن کلیک کنید شما را به خط دوم آن فایل برده و خطا را نشان خواهد داد.
نکته: اگر مقدار داده ایکه تعریف می کنیم قرار است دوباره بشود آن را تغییر داد بایستی از متغیر برای تعریفش استفاده کنید در غیر اینصورت اگر مقدار داده ای قرار است در طول کل برنامه تغییر نکند، از ثابت برای تعریف آن استفاده نمائید.
در مقاله بعدی فصل دوم دوره آموزش جاوا اسکریپت برای مبتدی ها، به موضوع زیر خواهیم پرداخت :