مقدمة: لماذا يمكن للخلط بين := و = أن يكسر كود Go الخاص بك
\n\nأنت تكتب بلغة Go، كل شيء يسير على ما يرام، ولكن فجأة يُصدر المترجم خطأ no new variables on left side of :=. هل هذا مألوف؟ أو ترى كود زميلك حيث يستخدم تارة = وتارة :=، ويبدو أنه لا يوجد فرق. في الواقع، الفرق جوهري، وعدم فهم هذا هو أحد أكثر الأخطاء شيوعًا بين المبتدئين في Golang.
في هذا الدليل، سنشرح كيف يختلف المُعامِلان := (إعلان متغير قصير) و = (تعيين). ستتعرف على متى تستخدم أيًا منهما، وكيف تتجنب الوقوع في الأخطاء، وكيف تكتب كودًا أنظف وأكثر اصطلاحية في Go. هيا بنا!
الأساسيات: ما هي المتغيرات ولماذا نحتاجها؟
\n\nقبل أن نغوص في تفاصيل المُعامِلات، دعنا نتذكر أن المتغير هو منطقة مسماة في الذاكرة تُخزّن قيمة من نوع معين. في Go، كما في أي لغة شديدة التحديد (strictly typed)، يجب التعامل مع المتغير بحذر.
\n\nالمُعامِلان := و = هما طريقتان للتفاعل مع المتغيرات، لكنهما يحلان مهامًا مختلفة. الأول يُعلن عن متغير، والثاني يُغير قيمته.
المُعامِل = (التعيين): تغيير فقط، بدون إعلان
\n\nالمُعامِل = هو التعيين التقليدي. يأخذ متغيرًا موجودًا بالفعل ويُسجّل فيه قيمة جديدة. إذا لم يكن المتغير موجودًا، سيُصدر المترجم خطأ.
package main\n\nimport "fmt"\n\nfunc main() {\n var name string // أعلنا عن المتغير بشكل صريح\n name = "Go" // عيّنا قيمة (يعمل)\n fmt.Println(name)\n\n // age = 10 // خطأ: المتغير age غير مُعلن\n}\n\n\nهنا، تم إعلان name باستخدام var، لذلك يمكننا استخدام =. إذا حاولنا كتابة age = 10 دون إعلان مسبق، سيرفض المترجم تجميع الكود.
متى تستخدم =؟
\n- \n
- عندما يكون المتغير قد تم إعلانه بالفعل (عبر
varأو:=). \n - في الحلقات والتكرارات لتحديث العدادات. \n
- عند العمل مع المؤشرات والهياكل (structs) حيث تحتاج إلى تغيير حقل. \n
المُعامِل := (الإعلان القصير): إعلان + تعيين في خطوة واحدة
\n\nالمُعامِل := هو "سكر نحوي" (syntactic sugar) يُعلن في نفس الوقت عن متغير ويُعيّن له قيمة. يتم استنتاج نوع المتغير تلقائيًا من التعبير الموجود على اليمين. هذا أقصر بكثير من كتابة var x int = 5.
package main\n\nimport "fmt"\n\nfunc main() {\n name := "Go" // أعلن وعيّن، النوع string\n age := 10 // أعلن وعيّن، النوع int\n fmt.Println(name, age)\n}\n\n\nهذا يُعادل:
\nvar name string = "Go"\nvar age int = 10\n\n\nلكن := أقصر وأسهل في القراءة. القاعدة الأساسية: يجب أن يكون هناك متغير جديد واحد على الأقل على يسار :=. إذا كانت جميع المتغيرات قد تم إعلانها بالفعل، فستحصل على خطأ.
متى تستخدم :=؟
\n- \n
- لإعلان المتغيرات المحلية داخل الدوال. \n
- في حلقات
for،ifوswitchمع تهيئة قصيرة. \n - عند العمل مع دوال تُرجع قيمًا متعددة (مثل
err := someFunc()). \n
الفرق الرئيسي: الإعلان مقابل التغيير
\n\nأهم فرق يجب تذكره:
\n- \n
:=هو إعلان (declaration). يُنشئ متغيرًا جديدًا في نطاق الرؤية الحالي. \n =هو تعيين (assignment). يُغير متغيرًا موجودًا. \n
حاول أن تتخيل هذا كالفرق بين "ولادة" متغير و"تغيير اسمه". لا يمكنك تغيير