المتغيرات في جافا سكريبت JavaScript Variables
تُعد المتغيرات (Variables) من أهم اللبنات الأساسية في أي لغة برمجة، فهي الوسيلة التي نستخدمها لتخزين البيانات ومعالجتها أثناء تنفيذ البرامج. في JavaScript يمكن تعريف المتغيرات بعدة طُرق، وكل طريقة تمتلك خصائصها واستخداماتها الخاصة… في هذا المقال، سنتعرف على طرق التعامل مع المتغيرات في JavaScript…
تُستخدم المتغيرات في لغة جافا سكريبت (JavaScript) كما لغات البرمجة الأخرى المتغيرات لتخزين البيانات عبر حجز أماكن في الذاكرة لحفظ قيم المتغيرات… حيث تُعتبرهذه المتغيرات حاويات مُسمّاة. يُمكنك وضع البيانات في هذه الحاويات ثم الإشارة إليها بمجرد تسمية الحاوية. في جافا سكريبت يمكن تعريف المتغيرات بطُرق عدة هذا لأن JavaScript لغة متطورة ومع تطور اللغة وظهور إصدارات حديثة مثل ES6، أُدخلت كلمات مفتاحية جديدة مثل let و const بجانب الطرق التقليدية، مما أتاح للمبرمجين مزيدًا من التحكم في نطاق المتغيرات وطريقة التعامل معها…. في هذا المقال نستعرض الطُرق المتوفرة في JavaScript لتعريف المتغيرات والفروق بينها ،لنبدأ….
في هذا المقال نتعرف على:
- تعريف المتغيرات بدون استخدام أي كلمات مفتاحية.
- تعريف المتغيرات باستخدام "var".
- تعريف المتغيرات باستخدام "let".
- الفرق بين استخدام let و var عند تعريف المتغيرات في جافا سكريبت.
- تعريف الثوابت "const".
- مقارنة شاملة للمتغيرات في لغة JavaScript.
- قواعد تسمية المتغيرات جافا سكريبت.
تعريف المتغيرات بدون استخدام أي كلمات مفتاحية
في JavaScript يمكن تعريف المتغيرات حتى بدون استخدام أي من الكلمات المفتاحية (without using any keywords) مثل var أو let أو const. عند القيام بذلك، يتم إنشاء المتغير تلقائيًا كمُتغيّرعام (Global Variable) حتى لو تم تعريفه داخل دالة. هذه الطريقة قد تؤدي إلى مشاكل في الكود وصعوبة تتبع الأخطاء، لذلك يُنصح بتجنبها تمامًا في البرمجة الحديثة. الصيغة أدناه لإعلان المتغيرات دون استخدام أي كلمات مفتاحية…
...........
num = 1;
str = "Hello World!";
...........
عند استخدام هذه الطريقة يجب علينا إسناد قيمة للمتغير عند لحظة الاعلان عنه.
تعريف المتغيرات باستخدام "var"
تُعد كلمة var من أقدم الطرق لتعريف المتغيرات في JavaScript، حيث كانت الوسيلة الأساسية قبل ظهور let و const في الإصدارات الحديثة. المتغيرات المعرّفة بـ var تمتلك نطاق دالة (Function Scope) ويمكن إعادة تعريفها داخل نفس النطاق، كما يتم رفعها (Hoisting) إلى أعلى النطاق مع تهيئتها تلقائيًا بقيمة undefined. وعلى الرغم من أنها ما زالت مدعومة، إلا أن استخدامها أصبح أقل شيوعًا في البرمجة الحديثة. ويوضح المثال التالي استخدام الكلمة المفتاحية var طريقة الإعلان المتغيرات بواسطة var ….
...........
var num;
var str;
...........
يمكننا أيضًا إعلان عدة متغيرات باستخدام الكلمة المفتاحية var نفسها كما يلي:
...........
var num, str;
...........
إن استخدم الكلمة المفتاحية var فقط للإعلان أو التهيئة ، مرة واحدة فقط طوال عمر أي اسم متغير في المستند. لا يجب إعادة إعلان نفس المتغير مرتين. وعند محاولة طباعة القيم للمتغيرات أعلاه ستكون قيم غير معروفة (undefined) طبيعي.! لاننا لم نقم بتهيئة قيم لها في المثال يمكن أن تكون التهيئة كتالي:
...........
var num =1; // Declaration with initialization
var str;//Declaration
str = "Hello World!"; //Initialization
...........
تعريف المتغيرات باستخدام "let"
كلمة let من الطرق الحديثة لتعريف المتغيرات في JavaScript، حيث تم تقديمها مع الإصدار ES6 لتحسين التحكم في النطاق وتجنب المشاكل التي قد تحدث عند استخدام var. المتغيرات المعرّفة بـ let تمتلك نطاق كتلة (Block Scope)، ولا يمكن إعادة تعريفها داخل نفس النطاق، كما أنها تُرفع (Hoisted) لكن لا يمكن استخدامها قبل التعريف بسبب ما يُعرف بالمنطقة الميتة المؤقتة (Temporal Dead Zone). هذه الخصائص تجعل let الخيار المفضل في أغلب حالات البرمجة الحديثة. ويتم استخدام let كتالي :
...........
let num = 1;
let str = "Hello World!";
...........
السبب الرئيسي وراء إدخال الكلمة المفتاحية let هو تحسين سلوكيات تحديد نطاق المتغيرات وسلامة الكود.
الفرق بين استخدام let و var عند تعريف المتغيرات في جافا سكريبت
في JavaScript يمكن استخدام كلٌّ من let و var في تعريف المتغيرات، لكن هناك فروق مهمة بينهما تؤثر على نطاق المتغير (Scope) وطريقة عمله أهم هذه الفروق هي :
1- النطاق (Scope)
var → لها نطاق دالة (Function Scope):
أي إذا عرّفت متغير باستخدام var داخل دالة، فهو يكون مرئيًا في كامل الدالة حتى خارج الكتل {...}.
let → لها نطاق كتلة (Block Scope):
أي إذا عرّفت متغير بـ let داخل كتلة {....} (مثل شرط if أو حلقة for) فلن يكون متاحًا خارجها.
مثال:
...........
if (true) {
var x = 10;
let y = 20;
}
console.log(x); // Correct statement, the x variable is visual out of "if" scope.
console.log(y); // Error , the y variable is invisible out of "if" scope.
...........
2- إعادة التعريف (Re-declaration)
var → يمكن إعادة تعريف المتغير في نفس النطاق بدون خطأ.
let → لا يمكن إعادة تعريفه في نفس النطاق.
مثال:
...........
var x= 5;
var x= 6; // Allowed
let y= 5;
let y= 6; // Not allowed
...........
3- الرفع (Hoisting)
var → يتم رفعها لأعلى النطاق، ولكنها تُهيأ بقيمة undefined قبل الوصول إلى سطر التعريف.
let → يتم رفعها، لكن لا يمكن استخدامها قبل التعريف (Temporal Dead Zone)
مثال:
...........
console.log(x); //Accessible as variable with "undefined" value
var x = 5;
console.log(y); // Error, can’t access before the declaration
let y = 5;
...........
تعريف الثوابت "const"
تُستخدم كلمة const في JavaScript لتعريف الثوابت وهي نوع من حاويات البيانات المسماة التي لا يمكن إعادة تعيين قيمتها بعد تعريفها (الثوابت constants) بينما يمكن التعديل عليها. تم اضافة الثوابت الى JavaScript في الإصدارES6 عام 2015 ، وتمتلك الثوابت نطاق كتلة (Block Scope)، مما يعني أن المتغير يكون محصورًا داخل الكتلة التي عُرِّف فيها. كم يجب تهيئة الثابت لحظة الاعلان عنه ويكون الإعلان عنه كتالي:
...........
/ / correct declaration
const num = 10;
/* Incorrect declaration
const num ;
num = 10; */
...........
وعلى الرغم من أن قيمة المتغير المعرّف بـ const لا يمكن تغييرها، إلا أنه في حالة الكائنات والمصفوفات يمكن تعديل محتواها الداخلي، لكن لا يمكن إعادة إسنادها إلى مرجع جديد، أي لها مرجع ثابت (constant reference). استخدام const يساعد في كتابة كود أكثر أمانًا واستقرارًا، ويُفضل استخدامه للثوابت أو القيم التي لا تتغير.
مقارنة شاملة للمتغيرات في لغة JavaScript
جافا سكريبت لغة غير مكتوبة (untyped). مما يعني أن اللغة لا تتطلب تحديد أنواع البيانات عند تعريف المتغيرات. فمتغير جافا سكريبت يمكنه حمل قيمة من أي نوع بيانات. كما يمكن أن يتغير نوع قيمة المتغير أثناء تنفيذ البرنامج، وتتولى جافا سكريبت الأمر تلقائيًا. فيما يلي مقارنة شاملة بين المتغيرات المعرفة لكلاً من var و let و const في JavaScript:
وجه المقارنة | var | let | const |
---|---|---|---|
الاستخدام | نادرًا، للتوافق مع الكود القديم | مفضل عند الحاجة لتغيير القيمة | مفضل للثوابت والقيم التي لا تتغير |
إعادة التعيين (Re-assignment) | مسموح | مسموح | غير مسموح |
النطاق (Scope) | نطاق دالة (Function Scope) | نطاق كتلة (Block Scope) | نطاق كتلة (Block Scope) |
عادة التعريف (Re-declaration) | مسموح إعادة التعريف في نفس النطاق | غير مسموح إعادة التعريف في نفس النطاق | غير مسموح إعادة التعريف في نفس النطاق |
Hoisting (الرفع) | يتم رفعها وتُهيأ بـ undefined | يتم رفعها لكن لا يمكن استخدامها قبل التعريف (Temporal Dead Zone) | يتم رفعها لكن لا يمكن استخدامها قبل التعريف (Temporal Dead Zone) |
يعتبر استخدم let أو const بدلًا من var في المشاريع الحديثة، لأنها أكثر أمانًا وتجنّب الأخطاء الناتجة عن النطاق أو إعادة التعريف. var قديمة، وتُستخدم فقط للتوافق مع أكواد JavaScript القديمة.
قواعد تسمية المتغيرات جافا سكريبت
عند كتابة المتغيرات في JavaScript، هناك مجموعة من القواعد التي يجب اتباعها لضمان أن تكون الأسماء صحيحة ومقبولة من قبل المترجم (Compiler) والالتزام بهذه القواعد يساعد في جعل الكود أكثر وضوحًا وسهولة في الصيانة. فيما يلي بعض قواعد تسمية المتغيرات في جافا سكريبت:
- الأحرف والرموز: في جافا سكريبت، يمكن أن يحتوي اسم المتغير على أرقام، وأحرف أبجدية، وأحرف خاصة مثل الشرطة السفلية (_) وعلامة الدولار ($).
- الأرقام: يجب ألا تبدأ أسماء متغيرات جافا سكريبت برقم، بل يجب أن تبدأ بحرف أو علامة سفلية. على سبيل المثال، 123numt اسم متغير غير صحيح، بينما _123numt اسم صحيح.
- حساسية حالة الأحرف: أسماء المتغيرات حساسة لحالة الأحرف. هذا يعني أن Name وname معرفان مختلفان.
- دعم Unicode: يمكن أن تحتوي المعرفات أيضًا على Unicode. لذلك، يمكن للمطورين تعريف المتغيرات بأي لغة.
- الكلمات المفتاحية المحجوزة (Keywords): يجب عدم استخدام أي من الكلمات المفتاحية المحجوزة في جافا سكريبت كاسم متغير. على سبيل المثال، أسماء المتغيرات "break" أو "boolean" غير صالحة. هنا، نقدم قائمة كاملة بالكلمات المفتاحية المُحترمة في JavaScript.
إن الالتزام بقواعد تسمية المتغيرات في JavaScript ليس مجرد أمر شكلي، بل هو خطوة أساسية لكتابة كود منظم وسهل القراءة والصيانة. اختيار أسماء واضحة ومعبرة للمتغيرات يساعد على فهم الكود بسرعة، ويقلل من الأخطاء المحتملة عند التعديل أو التطوير. لذلك، احرص دائمًا على اتباع هذه القواعد لضمان جودة ووضوح برنامجك.
تعريف المتغيرات في JavaScript واختيار الطريقة المناسبة (varأو let أو const) يعتبر خطوة أساسية لكتابة كود منظم وفعال. ومع فهم الفروق بين هذه الأساليب والالتزام بقواعد تسمية المتغيرات، يمكن للمبرمج تجنب الكثير من الأخطاء الشائعة وتحسين جودة برامجه. لذلك،علينا دائمًا الحرص على اختيار الكلمة المفتاحية التي تناسب احتياجاتنا البرمجي والتي تساعدنا على كتابة أكواد أكثر وضوحًا وأمانًا.