في لغة جافاسكريبت، تُستخدم المتغيرات (Variables) لتخزين البيانات أو القيم التي يمكن استخدامها والتلاعب بها في البرنامج. المتغير هو عبارة عن مكان في الذاكرة يحمل اسمًا معينًا وقيمة معينة. يمكن تغيير قيمة المتغير أثناء تنفيذ البرنامج.

لماذا نحتاج إلى المتغيرات؟

نحتاج إلى المتغيرات للأسباب التالية:

  • تخزين البيانات: لحفظ البيانات مؤقتًا لاستخدامها لاحقًا في البرنامج.
  • إعادة استخدام القيم: لتجنب تكرار كتابة نفس القيمة في أماكن متعددة في البرنامج.
  • التلاعب بالبيانات: لتعديل وتغيير القيم أثناء تنفيذ البرنامج.
  • جعل الكود أكثر قابلية للقراءة والصيانة: استخدام أسماء ذات معنى للمتغيرات يجعل الكود أسهل في الفهم والتعديل.

كيفية تعريف المتغيرات في جافاسكريبت:

يوجد ثلاث طرق رئيسية لتعريف المتغيرات في جافاسكريبت:

  1. var:
  • كانت الطريقة التقليدية لتعريف المتغيرات قبل ES6 (إصدار حديث من جافاسكريبت).
  • نطاق المتغير المعرف باستخدام var يكون نطاق الوظيفة (function scope) أو نطاق عام (global scope) إذا تم تعريفه خارج أي وظيفة.
  • عيوب var:
    • رفع المتغير (Variable Hoisting): يمكن استخدام المتغير قبل تعريفه فعليًا، مما قد يؤدي إلى أخطاء غير متوقعة.
    • إعادة تعريف المتغير: يمكن إعادة تعريف نفس المتغير بنفس الاسم داخل نفس النطاق، مما قد يسبب مشاكل.

مثال:

JavaScript
var x = 10; // تعريف متغير x وإعطائه القيمة 10
var name = "Ahmed"; // تعريف متغير name وإعطائه القيمة "Ahmed"

function myFunction() {
var y = 20; // y معرف داخل الوظيفة فقط
console.log(x); // يمكن الوصول إلى x هنا لأنه نطاق عام
}

console.log(x); // يمكن الوصول إلى x هنا
// console.log(y); // خطأ: y غير معرفة خارج الوظيفة
  1. let:
  • تم تقديمها في ES6 لحل مشاكل var.
  • نطاق المتغير المعرف باستخدام let يكون نطاق الكتلة (block scope)، أي أنه متاح فقط داخل الكتلة (مثل if، for، while، {}) التي تم تعريفه فيها.
  • لا يسمح بإعادة تعريف نفس المتغير بنفس الاسم داخل نفس النطاق.

مثال:

JavaScript
let x = 10;

if (true) {
let y = 20; // y معرف داخل كتلة if فقط
console.log(x); // يمكن الوصول إلى x هنا
}

console.log(x); // يمكن الوصول إلى x هنا
// console.log(y); // خطأ: y غير معرفة خارج كتلة if

let name = "Ali";
// let name = "Mohammed"; // خطأ: لا يمكن إعادة تعريف name في نفس النطاق
  1. const:
  • تم تقديمها في ES6 لتعريف الثوابت (constants)، أي المتغيرات التي لا يمكن تغيير قيمتها بعد تعريفها.
  • نطاق المتغير المعرف باستخدام const هو نطاق الكتلة (block scope).
  • يجب إعطاء قيمة ابتدائية للمتغير عند تعريفه باستخدام const.

مثال:

JavaScript
const PI = 3.14159;
// PI = 3.14; // خطأ: لا يمكن تغيير قيمة PI

const message = "Hello";
// message = "World"; // خطأ: لا يمكن تغيير قيمة message

const user = { name: "Fatima" };
user.name = "Khadija"; // مسموح: يمكن تغيير خصائص الكائن
// user = { name: "Layla" }; // خطأ: لا يمكن إعادة تعيين الكائن نفسه

قواعد تسمية المتغيرات في جافاسكريبت:

  • يجب أن تبدأ أسماء المتغيرات بحرف أو شرطة سفلية (_) أو علامة الدولار ($).
  • يمكن أن تحتوي أسماء المتغيرات على أحرف وأرقام وشرطة سفلية وعلامة الدولار.
  • أسماء المتغيرات حساسة لحالة الأحرف (case-sensitive)، أي أن myVar تختلف عن myvar.
  • لا يمكن استخدام الكلمات المحجوزة في جافاسكريبت كأسماء للمتغيرات (مثل var، let، const، if، for، إلخ).
  • يُفضل استخدام أسماء ذات معنى للمتغيرات لتوضيح الغرض منها.
  • يُفضل استخدام نمط camelCase في تسمية المتغيرات التي تتكون من أكثر من كلمة (مثل firstName، userAge).

متى نستخدم var و let و const؟

  • const: يُفضل استخدامها افتراضيًا لجميع المتغيرات التي لا نتوقع تغيير قيمتها.
  • let: تُستخدم للمتغيرات التي نتوقع تغيير قيمتها.
  • var: يُنصح بتجنب استخدامها قدر الإمكان بسبب مشاكلها، إلا إذا كنت مضطرًا لدعم متصفحات قديمة جدًا لا تدعم let و const.

باختصار، المتغيرات هي أساس البرمجة في جافاسكريبت، وتُستخدم لتخزين البيانات والتلاعب بها. من المهم فهم طرق تعريف المتغيرات وقواعد تسميتها واستخدام let و const بشكل صحيح لكتابة كود جافاسكريبت نظيف وفعال.