انواع متغیرها در Node.js: بررسی کامل متغیرها⭐ – بخش دوم

انواع متغیرها در Node.js: بررسی کامل انواع و کاربردهای آن‌ها – بخش دوم

با سلام خدمت همه دوستان و همراهان همیشگی وب سایت فراز کد:

در بخش اول به معرفی متغیر های Let و Var پرداختیم و مزایا و معایب هر کدام را توضیح دادیم در این بخش به معرفی متغیر های Const , Local و Global میپردازیم با ما همراه باشید

انواع متغیرها در Node.js: بررسی کامل متغیرها⭐ – بخش دوم

متغیرهای Const (ثابت)

متغیرهای Const (مخفف Constant به معنای ثابت) برای تعریف مقادیری استفاده می‌شوند که تغییرناپذیر هستند. یعنی یک‌بار مقداردهی می‌شوند و در طول اجرای برنامه نمی‌توان آن‌ها را تغییر داد. این نوع متغیرها معمولاً برای مقادیر ثابت مانند عدد پی (π)، تنظیمات پیش‌فرض یا مقادیری که در طول برنامه تغییر نمی‌کنند، استفاده می‌شوند.

ویژگی‌ها:

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

تغییرناپذیر: پس از تعریف، نمی‌توان مقدار آن را تغییر داد.

محدوده دسترسی: بستگی به جایی که تعریف شده‌اند دارد (مثلاً اگر داخل یک تابع تعریف شوند، فقط در همان تابع قابل دسترسی هستند).

JavaScript
// مثال ۱: تعریف یک مقدار ثابت
const PI = 3.14159;
console.log(PI); // خروجی: 3.14159

// مثال ۲: تلاش برای تغییر مقدار Const (خطا می‌دهد)
const MAX_USERS = 100;
MAX_USERS = 200; // خطا! مقدار Const قابل تغییر نیست.

// مثال ۳: استفاده از Const در یک تابع
function calculateArea(radius) {
    const PI = 3.14;
    return PI * radius * radius;
}
console.log(calculateArea(5)); // خروجی: 78.5

متغیرهای const یکی از ویژگی‌های جدیدتر زبان جاوا اسکریپت هستند که از ES6 (ECMAScript 2015) معرفی شدند. این نوع متغیرها به توسعه‌دهندگان این امکان را می‌دهند که مقادیری را تعریف کنند که نباید تغییر کنند. در این بخش به بررسی ویژگی‌ها، مزایا و معایب متغیرهای const خواهیم پرداخت.

1.دامنه (Scope) متغیرهای const

متغیرهای تعریف‌شده با کلمه کلیدی const دارای دامنه بلوکی (block scope) هستند. این بدان معناست که متغیرهای const تنها در بلوکی که در آن تعریف شده‌اند، قابل دسترسی هستند. این ویژگی مشابه متغیرهای let است و به توسعه‌دهندگان این امکان را می‌دهد که متغیرها را به طور دقیق‌تری مدیریت کنند.

مثال:

JavaScript
function example() {
    const x = 10; // متغیر x در دامنه تابع
    if (true) {
        const x = 20; // متغیر جدید x در دامنه بلوک
        console.log(x); // 20
    }
    console.log(x); // 10
}
example();

2. عدم تغییر مقدار

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

مثال:

JavaScript
const x = 10;
x = 20; // TypeError: Assignment to constant variable

خطای “TypeError: Assignment to constant variable” به این معنی است که شما سعی کرده‌اید یک مقدار جدید به یک متغیر از نوع const اختصاص دهید، در حالی که این کار مجاز نیست.

3. تغییر مقادیر داخلی اشیاء

لازم به ذکر است که اگر یک شیء یا آرایه با const تعریف شود، می‌توان مقادیر داخلی آن شیء یا آرایه را تغییر داد، اما نمی‌توان خود شیء یا آرایه را دوباره تعریف کرد.

JavaScript
const obj = { name: "John" };
obj.name = "Doe"; // مجاز است
console.log(obj.name); // Doe

// obj = { name: "Jane" }; // خطا: Assignment to constant variable.

خطای “Assignment to constant variable” در جاوااسکریپت به این معنی است که شما سعی کرده‌اید یک مقدار جدید به یک متغیر از نوع const اختصاص دهید، در حالی که این کار مجاز نیست. متغیرهای تعریف شده با const ثابت هستند و پس از مقداردهی اولیه، نمی‌توان مقدار جدیدی به آن‌ها اختصاص داد

4. استفاده در Node.js

در Node.js، متغیرهای const به همان شیوه‌ای که در مرورگرها عمل می‌کنند، کار می‌کنند. این نوع متغیرها به دلیل عدم تغییر مقدار و دامنه بلوکی، به شدت مورد توجه توسعه‌دهندگان قرار گرفته‌اند و معمولاً در پروژه‌های جدید توصیه می‌شوند.

 مزایای استفاده از Const

 ۱. امنیت و جلوگیری از تغییرات ناخواسته

با استفاده از `const`، مطمئن می‌شوید که مقدار یک متغیر پس از تعریف، تغییرناپذیر است. این ویژگی باعث می‌شود از تغییرات تصادفی یا ناخواسته در کد جلوگیری شود.

JavaScript
  const MAX_USERS = 100;
  MAX_USERS = 200; // خطا! مقدار Const قابل تغییر نیست.

 ۲. خوانایی و قابل فهم‌تر بودن کد

وقتی از `const` استفاده می‌کنید، به دیگر توسعه‌دهندگان (یا حتی خودتان در آینده) این پیام را می‌رسانید که این مقدار ثابت است و نباید تغییر کند. این موضوع باعث می‌شود کد شما خوانایی بیشتری داشته باشد.

JavaScript
const TAX_RATE = 0.09; // مشخص است که این مقدار ثابت است.

 ۳. بهینه‌سازی توسط موتورهای جاوااسکریپت

موتورهای جاوااسکریپت (مانند V8 در کروم) می‌توانند کدهایی که از `const` استفاده می‌کنند را بهتر بهینه‌سازی کنند، زیرا می‌دانند که مقدار این متغیرها تغییر نخواهد کرد.

 ۴. جلوگیری از اشتباهات رایج

استفاده از `const` از اشتباهات رایجی مانند تغییر مقدار یک متغیر ثابت جلوگیری می‌کند. این موضوع به ویژه در پروژه‌های بزرگ که چندین توسعه‌دهنده روی آن کار می‌کنند، بسیار مفید است.

 معایب استفاده از Const

 ۱. انعطاف‌پذیری کم‌تر

از آنجا که مقدار `const` تغییرناپذیر است، اگر نیاز به تغییر مقدار یک متغیر داشته باشید، نمی‌توانید از “const”استفاده کنید. در چنین مواردی باید از “let” یا “var” استفاده کنید.

JavaScript
let counter = 0;
counter++; // کار می‌کند
const fixedCounter = 0;
fixedCounter++; // خطا! مقدار Const قابل تغییر نیست.

 ۲. محدودیت در مقداردهی

متغیرهای “const” باید بلافاصله پس از تعریف، مقداردهی شوند. یعنی نمی‌توانید یک متغیر “const” تعریف کنید و بعداً به آن مقدار اختصاص دهید.

JavaScript
const PI; // خطا! باید بلافاصله مقداردهی شود.
PI = 3.14;

 ۳. محدودیت در استفاده با آرایه‌ها و اشیا

اگرچه مقدار `const` تغییرناپذیر است، اما اگر مقدار آن یک آرایه یا شیء باشد، همچنان می‌توان محتوای آن‌ها را تغییر داد. این موضوع ممکن است باعث سردرگمی شود.

JavaScript
const colors = ["قرمز", "سبز", "آبی"];
colors.push("زرد"); // کار می‌کند
console.log(colors); // خروجی: ["قرمز", "سبز", "آبی", "زرد"]

const person = { name: "Ali", age: 25 };
person.age = 30; // کار می‌کند
console.log(person); // خروجی: { name: "Ali", age: 30 }

متغیرهای Local (محلی)

متغیرهای محلی به متغیرهایی اطلاق می‌شود که در یک تابع یا بلوک خاص تعریف می‌شوند و تنها در آن دامنه (scope) قابل دسترسی هستند. این نوع متغیرها به توسعه‌دهندگان این امکان را می‌دهند که داده‌ها را به طور موقت ذخیره کنند و از تداخل با متغیرهای دیگر جلوگیری کنند. از ویژگی های متغییر local می توان :

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

مثال‌:

JavaScript
// مثال ۱: متغیر Local داخل یک تابع
function greet() {
    let message = "سلام، به وبلاگ ما خوش آمدید!"; // متغیر Local
    console.log(message);
}
greet(); // خروجی: سلام، به وبلاگ ما خوش آمدید!
console.log(message); // خطا! message خارج از محدوده تعریف شده است.

// مثال ۲: متغیر Local داخل یک حلقه
for (let i = 0; i < 3; i++) {
    let loopMessage = "شماره: " + i; // متغیر Local
    console.log(loopMessage);
}
console.log(loopMessage); // خطا! loopMessage خارج از محدوده تعریف شده است.

// مثال ۳: متغیر Local داخل یک شرط
if (true) {
    let conditionMessage = "این یک پیام شرطی است"; // متغیر Local
    console.log(conditionMessage);
}
console.log(conditionMessage); // خطا! conditionMessage خارج از محدوده تعریف شده است.

دامنه (Scope) متغیرهای محلی

دامنه متغیرهای محلی معمولاً به دامنه تابع (function scope) یا دامنه بلوکی (block scope) بستگی دارد. متغیرهای محلی تعریف‌شده با var دارای دامنه تابعی هستند، در حالی که متغیرهای تعریف‌شده با let و const دارای دامنه بلوکی هستند.

JavaScript
function example() {
    var x = 10; // متغیر محلی با دامنه تابعی
    if (true) {
        var x = 20; // همان متغیر x
        console.log(x); // 20
    }
    console.log(x); // 20
}
example();

مثال – دامنه بلوکی:

JavaScript
function example() {
    let x = 10; // متغیر محلی با دامنه تابعی
    if (true) {
        let x = 20; // متغیر جدید x در دامنه بلوک
        console.log(x); // 20
    }
    console.log(x); // 10
}
example();

مزایای استفاده از متغیرهای محلی

۱. محدوده دسترسی کنترل‌شده (Scope)

متغیرهای محلی فقط در داخل بلوکی که تعریف شده‌اند (مانند یک تابع، حلقه یا شرط) قابل دسترسی هستند. این ویژگی از تداخل نام‌ها (Name Collision) و تغییرات ناخواسته در سایر بخش‌های برنامه جلوگیری می‌کند.

مثال:

JavaScript
function printMessage() {
    let message = "این یک متغیر محلی است"; // متغیر محلی
    console.log(message); // کار می‌کند
}
printMessage();
console.log(message); // خطا! message خارج از محدوده تعریف شده است.

۲. بهینه‌سازی حافظه

متغیرهای محلی پس از اتمام اجرای بلوک کد (مثلاً پایان یک تابع) از حافظه پاک می‌شوند. این موضوع باعث می‌شود حافظه بهینه‌تر مدیریت شود، به ویژه در برنامه‌های بزرگ.

مثال:

JavaScript
function calculateSum(a, b) {
    let result = a + b; // متغیر محلی
    return result;
}
console.log(calculateSum(2, 3)); // خروجی: 5
// متغیر result پس از اتمام تابع از حافظه پاک می‌شود.

۳. جلوگیری از تغییرات ناخواسته

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

مثال:

JavaScript
let globalVar = "متغیر سراسری";

function updateVar() {
    let globalVar = "متغیر محلی"; // این متغیر، متغیر سراسری را تغییر نمی‌دهد.
    console.log(globalVar); // خروجی: متغیر محلی
}
updateVar();
console.log(globalVar); // خروجی: متغیر سراسری

۴. خوانایی و سازمان‌دهی کد

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

معایب استفاده از متغیرهای محلی

۱. محدودیت در دسترسی

متغیرهای محلی فقط در محدوده تعریف‌شده‌شان قابل دسترسی هستند. اگر نیاز به استفاده از یک متغیر در چندین بخش از برنامه داشته باشید، نمی‌توانید از متغیرهای محلی استفاده کنید.

مثال:

JavaScript
function printMessage() {
    let message = "این یک متغیر محلی است";
    console.log(message); // کار می‌کند
}
console.log(message); // خطا! message خارج از محدوده تعریف شده است.

۲. زندگی کوتاه (Short Lifetime)

متغیرهای محلی فقط در طول اجرای بلوک کد (مثلاً یک تابع) وجود دارند و پس از اتمام آن بلوک، از حافظه پاک می‌شوند. اگر نیاز به ذخیره داده‌ها برای مدت طولانی‌تر داشته باشید، استفاده از متغیرهای محلی مناسب نیست.

مثال:

JavaScript
function counter() {
    let count = 0; // متغیر محلی
    count++;
    console.log(count);
}
counter(); // خروجی: 1
counter(); // خروجی: 1 (مقدار count هر بار از اول شروع می‌شود)

۳. مشکل در اشکال‌زدایی (Debugging)

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

مثال:

JavaScript
function example() {
    let x = 10;
    if (true) {
        let x = 20; // این x با x بیرون متفاوت است.
        console.log(x); // خروجی: 20
    }
    console.log(x); // خروجی: 10
}
example();

چه زمانی از متغیرهای محلی استفاده کنیم؟

  • زمانی که نیاز به ذخیره موقت داده‌ها در یک بخش خاص از برنامه دارید.
  • زمانی که می‌خواهید از تداخل نام‌ها و تغییرات ناخواسته جلوگیری کنید.
  • زمانی که می‌خواهید حافظه بهینه‌تر مدیریت شود

متغیرهای سراسری (Global Variables)

متغیرهای سراسری، متغیرهایی هستند که در بالاترین سطح یک برنامه تعریف می‌شوند و در تمام بخش‌های برنامه (اعم از توابع، حلقه‌ها، شرط‌ها و …) قابل دسترسی هستند. این متغیرها تا زمانی که برنامه در حال اجرا است، در حافظه باقی می‌مانند.

تعریف متغیرهای جهانی

در جاوا اسکریپت، اگر یک متغیر خارج از هر تابعی تعریف شود، به عنوان یک متغیر جهانی شناخته می‌شود. همچنین، در Node.js می‌توان از شیء global برای تعریف متغیرهای جهانی استفاده کرد.

مثال:

JavaScript
var globalVar = "Hello, World!"; // متغیر جهانی

function example() {
    console.log(globalVar); // دسترسی به متغیر جهانی
}
example(); // "Hello, World!"

استفاده از شیء global در Node.js

در محیط Node.js، برای تعریف متغیرهای جهانی می‌توان از شیء global استفاده کرد. این روش به شما این امکان را می‌دهد که متغیرها را به طور خاص برای محیط Node.js تعریف کنید.

مثال:

JavaScript
global.globalVar = "Hello, Node.js!";

function example() {
    console.log(global.globalVar); // دسترسی به متغیر جهانی
}
example(); // "Hello, Node.js!"

مزایای استفاده از متغیرهای سراسری

دسترسی آسان در کل برنامه

متغیرهای سراسری در تمام بخش‌های برنامه قابل دسترسی هستند. این یعنی شما می‌توانید به راحتی از آن‌ها در هر تابع، حلقه یا بلوک کدی استفاده کنید.

مثال:

JavaScript
let userName = "Ali"; // متغیر سراسری

function greetUser() {
    console.log("سلام، " + userName); // استفاده از متغیر سراسری
}
greetUser(); // خروجی: سلام، Ali

ذخیره داده‌های مشترک

متغیرهای سراسری برای ذخیره داده‌هایی که باید در چندین بخش از برنامه استفاده شوند، بسیار مفید هستند. مثلاً تنظیمات برنامه، وضعیت کاربر یا داده‌های مشترک.

مثال:

JavaScript
let isLoggedIn = false; // متغیر سراسری

function login() {
    isLoggedIn = true;
    console.log("وضعیت ورود: " + isLoggedIn);
}
login(); // خروجی: وضعیت ورود: true

سادگی در استفاده

استفاده از متغیرهای سراسری ساده است و نیاز به تعریف متغیر در هر تابع یا بلوک کد ندارد. این موضوع باعث می‌شود کدنویسی سریع‌تر و راحت‌تر شود.

معایب استفاده از متغیرهای سراسری

۱. تداخل نام‌ها (Name Collision)

اگر در بخش‌های مختلف برنامه از نام‌های مشابه برای متغیرهای سراسری و محلی استفاده کنید، ممکن است باعث ایجاد تداخل و اشکالات ناخواسته شوید. این مشکل به ویژه در پروژه‌های بزرگ یا زمانی که از کتابخانه‌های خارجی استفاده می‌کنید، بیشتر دیده می‌شود.

مثال:

JavaScript
let counter = 0; // متغیر سراسری

function incrementCounter() {
    let counter = 10; // متغیر محلی
    counter++;
    console.log(counter); // خروجی: 11
}
incrementCounter();
console.log(counter); // خروجی: 0 (متغیر سراسری تغییر نکرده است)

۲. اشکال‌زدایی سخت‌تر

از آنجا که متغیرهای سراسری در هر جایی از برنامه قابل تغییر هستند، ردیابی تغییرات و اشکال‌زدایی آن‌ها می‌تواند سخت‌تر باشد. به ویژه اگر چندین تابع یا بخش از برنامه روی یک متغیر سراسری کار کنند.

مثال:

JavaScript
let total = 0; // متغیر سراسری

function addToTotal(value) {
    total += value;
}

function resetTotal() {
    total = 0;
}

addToTotal(10);
resetTotal(); // ممکن است فراموش کنید این تابع را صدا بزنید!
console.log(total); // خروجی: 0

۳. مصرف بیشتر حافظه

متغیرهای سراسری تا زمانی که برنامه در حال اجرا است، در حافظه باقی می‌مانند. این موضوع می‌تواند باعث مصرف بیش از حد حافظه، به ویژه در برنامه‌های بزرگ شود.

مثال:

JavaScript
let largeData = [/* آرایه‌ای بزرگ از داده‌ها */]; // متغیر سراسری
// این داده‌ها تا پایان برنامه در حافظه باقی می‌مانند.

۴. کاهش خوانایی و سازمان‌دهی کد

استفاده بیش از حد از متغیرهای سراسری می‌تواند باعث کاهش خوانایی و سازمان‌دهی کد شود. زیرا ممکن است نتوانید به راحتی تشخیص دهید کدام بخش از برنامه روی یک متغیر سراسری تأثیر می‌گذارد.

چه زمانی از متغیرهای سراسری استفاده کنیم؟

زمانی که نیاز به ذخیره داده‌هایی دارید که باید در چندین بخش از برنامه استفاده شوند (مانند تنظیمات، وضعیت کاربر و …).

زمانی که می‌خواهید داده‌ها را بین توابع یا ماژول‌های مختلف به اشتراک بگذارید.


چه زمانی از متغیرهای سراسری اجتناب کنیم؟

زمانی که می‌خواهید کد شما خوانا و قابل نگهداری باشد.

زمانی که می‌خواهید از تداخل نام‌ها و تغییرات ناخواسته جلوگیری کنید.

زمانی که می‌خواهید حافظه بهینه‌تر مدیریت شود.

سوالات متداول

  1. تفاوت بین var، let و const چیست؟

    var: دارای function scope است (یعنی فقط در داخل تابعی که تعریف شده محدود می‌شود).
    قابل hoisting است (یعنی حتی اگر قبل از تعریف استفاده شود، خطا نمی‌دهد اما مقدار undefined برمی‌گرداند).
    مقدار آن قابل تغییر است.
    let: دارای block scope است (یعنی فقط در داخل بلوک {} که تعریف شده محدود می‌شود).
    قابل hoisting نیست (اگر قبل از تعریف استفاده شود، خطا می‌دهد).
    مقدار آن قابل تغییر است.
    const: دارای block scope است.
    قابل hoisting نیست.
    مقدار آن ثابت است و پس از تعریف، قابل تغییر نیست (به جز در مورد اشیا و آرایه‌ها که می‌توان محتوای آنها را تغییر داد).

  2. آیا می‌توان مقدار یک متغیر const را تغییر داد؟

    اگر متغیر const یک مقدار ساده (مانند عدد، رشته یا بولین) داشته باشد، قابل تغییر نیست.
    اما اگر const یک شیء یا آرایه باشد، می‌توان ویژگی‌ها یا عناصر آن را تغییر داد. فقط نمی‌توان خود متغیر را به یک شیء یا آرایه جدید اختصاص داد.

آنچه در این مطلب میخوانید !
هیچ داده ای یافت نشد

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *