المتغيرات في لغة JavaScript
يا هلا والله بالجميع! اليوم بنشرح موضوع أساسي ومهم جداً في الجافاسكريبت: المتغيرات. لا تشيل هم، الموضوع سهل وبسيط.
وش يعني متغير (Variable)؟
بكل بساطة، المتغير هو زي "صندوق" أو "مكان" في الذاكرة تخزن فيه بيانات. ممكن تكون أرقام، نصوص، أشياء ثانية. تقدر تغير اللي داخل الصندوق هذا متى ما بغيت. يعني اسمه متغير لأنه قيمته تتغير.
أنواع المتغيرات في JavaScript
عندنا 3 طرق أساسية لتعريف المتغيرات في الجافاسكريبت: var، let، و const. كل وحده لها سالفه، وركز معي عشان تعرف متى تستخدم كل وحده.
1. المتغير var (القديم الطيب)
هذا يا طويل العمر والسلامة هو الطريقة القديمة اللي كنا نستخدمها قبل ES6 (إصدار 2015). له كم ميزة وعيب لازم تعرفها:
- Scope (النطاق): نطاقه يا يكون
global(عالمي) أوfunction-scoped(خاص بالدالة). يعني لو عرفت متغيرvarداخل دالة، ما تقدر توصل له من برا الدالة. ولو عرفته برا الدوال، بيكون متاح في كل مكان. - إعادة التعريف والتعديل: تقدر تعيد تعريف نفس المتغير بنفس الاسم في نفس النطاق، وهذا ممكن يسوي لك مشاكل. وتقدر تعدل قيمته طبعاً.
- Hoisting (الرفع): هذي حركة غريبة شوي. المتغيرات اللي تعرفها بـ
varيتم "رفعها" لأعلى نطاقها قبل تنفيذ الكود. يعني تقدر تستخدم المتغير قبل ما تعرفه، بس قيمته بتكونundefinedالين يوصل سطر التعريف.
ملاحظة: غالباً ما راح تستخدم
varكثير الحين، لأنletوconstأفضل وأكثر أماناً.
شوف هالمثال عشان تتوضح الصورة:
2. المتغير let (الرائع الجديد)
هذا يا شباب هو اللي نستخدمه بكثرة الحين. جاء مع ES6 وحل أغلب مشاكل var. ركز على الفرق:
- Scope (النطاق): نطاقه
block-scoped(خاص بالكتلة). وش يعني كتلة؟ يعني أي شي داخل أقواس{ }، زي جملةif،for loop، أو حتى كتلة عادية. المتغير اللي تعرفه بـletداخل كتلة، ما تقدر توصل له من برا الكتلة. - إعادة التعريف والتعديل: ما تقدر تعيد تعريف نفس المتغير بنفس الاسم في نفس النطاق. بس تقدر تعدل قيمته عادي.
- Hoisting (الرفع): هو صحيح يتم رفعه، بس يدخل في شي اسمه "Temporal Dead Zone" (منطقة الموت المؤقتة). يعني لو حاولت تستخدمه قبل ما تعرفه، بيعطيك خطأ على طول.
نصيحة: إذا تحتاج متغير قيمته تتغير، استخدم
let.
مثال على let:
3. المتغير const (الثابت ما يتغير)
هذا يا جماعة للقيم اللي ما تتغير أبداً. اسمه const اختصار لـ constant (ثابت). له نفس مميزات let من ناحية الـ scope والـ hoisting، بس فيه فرق جوهري:
- Scope (النطاق): نفس
let،block-scoped. - إعادة التعريف والتعديل: ما تقدر لا تعيد تعريف المتغير ولا تعدل قيمته بعد ما تعطيه قيمة أولية. لازم تعطيه قيمة أولية وقت التعريف.
- Hoisting (الرفع): نفس
let، يدخل في Temporal Dead Zone.
مهم: إذا كان المتغير عبارة عن كائن (object) أو مصفوفة (array)، فـ
constيضمن إن مرجع الكائن/المصفوفة ما يتغير، بس تقدر تغير محتويات الكائن/المصفوفة نفسها.
مثال على const:
متى تستخدم أي واحد فيهم؟
هذي القاعدة الذهبية اللي تمشي عليها:
- ابدأ بـ
const: استخدمه لكل متغير ما تتوقع إن قيمته بتتغير. هذا يخلي الكود حقك أوضح وأقل عرضة للأخطاء. - إذا احتاجت القيمة تتغير، استخدم
let: لو اكتشفت إن المتغير لازم قيمته تتعدل في المستقبل، حوّله لـlet. - ابتعد عن
varقدر الإمكان : ما لم تكن مضطراً للتعامل مع كود قديم جداً، لا تستخدمه.
وبكذا نكون غطينا أساسيات المتغيرات في الجافاسكريبت. الموضوع بسيط بس فهم الفروقات هذي بيخليك تكتب كود أنظف وأكثر احترافية. بالتوفيق يا وحوش!