مفاهیم پایه جاوا اسکریپت - متغیرها و ثابت ها

متغیرها (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، if، else، و ... باشد. نیازی به حفظ کردن کلمات کلیدی رزرو شده نیست چون هربار که شما اشتباها ازین کلمات در نامگذاری هایتان استفاده کنید خطای مربوط به شما اعلام خواهد شد. این خطا با قرار دادن خط قرمز زیر نام متغیر برایتان نشان داده خواهد شد.نامی که انتخاب می کنید بهتر است حتما معنا دار باشد. برخی ها برای نامگذاری متغیر ها از کلماتی مثل a، b، a1، x و ... استفاده می کنند. همانطور که می بینید ازین نام ها پیدا نیست که چه مقداری در آن متغیرها ذخیره شده است. بنابراین اکیدا توصیه می شود که از کلمات معنادار و توصیفی (Descriptive) برای نامگذاری ها استفاده کنید.نام هاییکه انتخاب می کنید نمی توانند با عدد شروع شوند. مثلا نمی توانیم متغیری رو 1name نامگذاری کنیم.نام هاییکه انتخاب می کنید نمی توانند شامل کاراکترهای فاصله (Space) و خط تیره (Hyphen) باشند. پس اگر نامیکه انتخاب می کنید از چند کلمه تشکیل شده است بایستی آن ها را به هم بچسبانید. مثلا فرض کنید می خواهیم متغیری برای ذخیره نام خانوادگی تعریف کنیم:let lastName = 'Taghani';برای نوشتن نام متغیر در این مثال از قرارداد Camel Notation استفاده شده است. طبق این قرارداد (Convention) بایستی حرف اول نخستین کلمه با حرف کوچک انگلیسی و حرف اول مابقی کلمات با حرف بزرگ انگلیسی نوشته شود.نام متغیرها حساس به حروف کوچک و بزرگ (Case Sensitive) هستند. لذا متغیرهای زیر با هم فرق دارند و در حقیقت دو متغیر مجزا از هم خواهند بود:let lastName = 'Taghani';let LastName = 'Taghani';در این مثال هر چند مقدار هر دو متغیر برابر با رشته Taghani می باشد اما در حقیقت دو متغیر متفاوت هستند و به دو مکان جداگانه در حافظه اشاره می کنند. اگر قرارداد Camel Notation را در نامگذاری ها رعایت کنیم با این مشکل مواجه نخواهیم شد.چطور چندین متغیر تعریف کنیم؟برای تعریف چند متغیر، دو روش وجود دارد که یکی از آن ها به عنوان بهترین روش توصیه می شود:همه چند متغیر را در یک خط پشت سر هم تعریف کنیم و آن ها را با ویرگول از هم جدا کنیم:let firstName, lastName = 'Taghani';همانطور که مشاهده می کنید یکبار از کلمه کلیدی let برای همه متغیرها استفاده نمودیم. همچنین می توانیم به متغیری مقدار اولیه بدهیم یا اینکه نه مقدارش همان مقدار پیش فرض undefined باشد.هر متغیر را در خط جداگانه ای تعریف کنیم. این روش به عنوان بهترین شیوه توصیه می شود لذا شما هم از آن پیروی کنید:let firstName;let lastName = 'Taghani';ثابت ها (Constants) چه هستند و چه فرقی با متغیرها دارند؟خود کلمه های ثابت و متغیر گویای این دو مفهوم در برنامه نویسی هستند و لذا چیز پیچیده ای نیستند. اما برای توضیح مفهوم ثابت در جاوا اسکریپت با یک مثال شروع می کنم. در فایل 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 ایجاد شده است که اگر روی آن کلیک کنید شما را به خط دوم آن فایل برده و خطا را نشان خواهد داد.نکته: اگر مقدار داده ایکه تعریف می کنیم قرار است دوباره بشود آن را تغییر داد بایستی از متغیر برای تعریفش استفاده کنید در غیر اینصورت اگر مقدار داده ای قرار است در طول کل برنامه تغییر نکند، از ثابت برای تعریف آن استفاده نمائید.در مقاله بعدی فصل دوم دوره آموزش جاوا اسکریپت برای مبتدی ها، به موضوع زیر خواهیم پرداخت :مفاهیم پایه جاوا اسکریپت - نوع های داده ای