1. المتغيرات والثوابت
في لغة البرمجة جولانج، المتغيرات والثوابت هما مفهومين أساسيين يلعبان دورًا مهمًا جدًا في البرنامج.
- المتغير هو مُعرِّف يُسمَى يُستخدم لتخزين البيانات في البرنامج. في جولانج، يُستخدم الكلمة المفتاحية
var
لتعريف المتغيرات. - الثابت هو مُعرِّف لا يمكن تغيير قيمته في البرنامج. في جولانج، يُستخدم الكلمة المفتاحية
const
لتعريف الثوابت.
2. تعريف وتهيئة متغيرات جولانج
2.1 تعريف وتعيين قيمة لمتغير واحد
في لغة البرمجة جو، يُستخدم الكلمة المفتاحية var
لتعريف متغير بتنسيق var اسم_المتغير النوع
. بعد التعريف، يمكن تعيين قيمة للمتغير في الشيفرة التالية، أو يمكن تهيئته مباشرة عند التعريف. على سبيل المثال:
var age int // يعلن عن متغير صحيح يُسمى age
age = 25 // يعين قيمة للمتغير
var name string = "Alice" // يعلن ويهيئ متغير الاسم
2.2 تعريف متغيرات متعددة
لغة البرمجة جو تدعم التعريف المتزامن لمتغيرات متعددة، مما يُمكن من جعل الشيفرة أكثر اختصارًا. يُجرى التعريف المجماعة عادة في بداية الدالة أو على مستوى الحزمة. على سبيل المثال:
var (
firstName, lastName string
age int
)
firstName = "John"
lastName = "Doe"
age = 30
في التعريف المجماعي أعلاه، يتم تعريف firstName
وlastName
كسلاسل، بينما يتم تعريف age
كعدد صحيح.
2.3 استنتاج النوع والإعلان المختصر للمتغيرات
في لغة البرمجة جو، ليس دائمًا من الضروري تحديد نوع المتغير بشكل صريح. إذا توفرت تعبيرات التهيئة عند تعريف المتغير، يمكن لجو استنتاج نوع المتغير. يُعرف هذا بالاستنتاج نوع المتغير. إعلان المتغير المختصر باستخدام الرمز :=
يمكن أن يبسط البيان الخاص بتعريف وتهيئة المتغيرات بناءً على استنتاج النوع. على سبيل المثال:
city := "بكين" // باستخدام إعلان المتغير المختصر للتعريف والتهيئة المتزامنة لـ city
country := "الصين" // يتم استنتاج نوع متغير الـ country على أنه سلسلة نصية
من الجدير بالملاحظة أن إعلانات المتغيرات المختصرة يمكن استخدامها داخل الدوال فقط ولا يمكن استخدامها على نطاق عالمي.
2.4 تعريف المتغيرات خارج الدوال
المتغيرات المعلنة خارج الدوال لها نطاق على مستوى الحزمة. تُصبح هذه المتغيرات مرئية وقابلة للوصول في جميع أنحاء الحزمة كلها. على سبيل المثال:
var globalVar string = "أنا على مستوى عالمي" // إعلان متغير عالمي
func printGlobalVar() {
fmt.Println(globalVar) // الوصول إلى المتغير العالمي داخل الدالة
}
يمكن مشاركة المتغيرات العالمية بين أي دوال داخل الحزمة، ولكن يجب استخدامها بحذر لتجنب تضاربات الأسماء المحتملة والإشارات غير الواضحة.
نصيحة: فهم الشيفرة الأساسية للدالة هنا يكفي، سيتم توفير توضيحات مفصلة للدوال في الأقسام التالية.
3 أنواع البيانات الأساسية وقيم الصفر
3.1 أنواع البيانات الأساسية في جولانج
في لغة البرمجة جو، يوفر كل نوع من أنواع المتغيرات دلالات صريحة وخصائص سلوكية. إليك بعض أنواع البيانات الأساسية الشائعة:
-
int
،int8
،int16
،int32
،int64
: نطاقات مختلفة من الأعداد الصحيحة -
uint
،uint8
،uint16
،uint32
،uint64
: أعداد صحيحة غير مؤْشَّرة -
float32
،float64
: أعداد عشرية -
bool
: قيم منطقية (صح أم خطأ) -
string
: سلاسل نصية
3.2 مفهوم قيم الصفر
في لغة البرمجة جو، يتم تهيئة المتغيرات تلقائيًا إلى قيمة الصفر الخاصة بنوعها بعد التعريف. تُشير قيمة الصفر إلى القيمة الافتراضية للنوع المقابل عندما لا يتم تهيئة المتغير بشكل صريح. وهذا ليس شائعًا في بعض اللغات الأخرى، ولكن في جو، يضمن ذلك أن جميع المتغيرات تحمل دائمًا قيمة افتراضية صحيحة. إليك قيم الصفر لكل نوع بيانات أساسي:
- قيمة الصفر للعدد الصحيح هي
0
- قيمة الصفر للعدد عشري هي
0.0
- قيمة الصفر للقيمة المنطقية هي
false
- قيمة الصفر للسلسلة النصية هي سلسلة فارغة
""
على سبيل المثال:
var i int // قيمة الصفر هي 0
var f float64 // قيمة الصفر هي 0.0
var b bool // قيمة الصفر هي false
var s string // قيمة الصفر هي ""
فهم مفهوم قيم الصفر مهم جدًا، حيث يمكن أن يساعد المطورين في فهم سلوك التهيئة للمتغير ويُمكن استخدامه لمنع أخطاء المؤشر الفارغ أو غير المبدئية.
4 نطاق المتغيرات
4.1 المتغيرات المحلية
المتغيرات المحلية هي المتغيرات المُعرّفة داخل الدالة، ويمكن الوصول إليها فقط داخل تلك الدالة. وتعتبر مُعامِلات الدالة أيضًا جزءًا من المتغيرات المحلية. ابتداءً من لحظة إنشائها وحتى اكتمال تنفيذ الدالة، ستختفي المتغيرات المحلية. ومع كل مرة يتم فيها استدعاء دالة، يتم إعادة إنشاء المتغيرات المحلية.
func localVariableExample() {
var localVariable int = 10 // هذا هو متغير محلي
fmt.Println(localVariable)
}
func main() {
localVariableExample() // الناتج: 10
// fmt.Println(localVariable) // سيتسبب هذا في حدوث خطأ ترجمة لأن المتغير المحلي غير مرئي هنا
}
في المثال أعلاه، يمكن الوصول فقط إلى localVariable
داخل دالة localVariableExample
.
4.2 المتغيرات العامة
المتغيرات العامة هي المتغيرات المُعرّفة خارج الدوال، ويمكن الوصول إليها في أي ملف داخل نفس الحزمة. إذا كنت ترغب في استخدام المتغيرات العامة في حزم أخرى، فيجب أن يبدأ اسم المتغير بحرف كبير، وفقًا لقواعد التحكم في الوصول بلغة Go.
package main
import "fmt"
var globalVariable int = 20 // هذا متغير عام
func main() {
fmt.Println(globalVariable) // الناتج: 20
changeGlobal()
fmt.Println(globalVariable) // الناتج: 30
}
func changeGlobal() {
globalVariable = 30 // تغيير قيمة المتغير العام
}
في هذا المثال، يُمكن الوصول إلى globalVariable
في كل من دالة main
ودالة changeGlobal
.
5 تعريف واستخدام الثوابت
5.1 الكلمة المفتاحية const
نستخدم الكلمة المفتاحية const
لتعريف الثوابت. الثوابت هي قيم لا يمكن تعديلها، وبمجرد تعريفها، لا يمكن تغيير قيمتها. يمكن أن تكون الثوابت من أي أنواع البيانات الأساسية مثل الأعداد الصحيحة، والأعداد عشرية الثابتة، والقيم البوليانية، أو السلاسل النصية.
const Pi = 3.14 // تعريف ثابت من نوع العدد العشري
const StrConst string = "مرحبًا، عالم!"
func main() {
fmt.Println(Pi)
fmt.Println(StrConst)
}
5.2 ثوابت التعداد
لغة Go ليس لديها نوع تعداد محدد، ولكن يمكنك استخدام الكلمة المفتاحية iota
لتحقيق التعداد. ضمن كتلة const
، سيتزايد قيمة iota
بمقدار 1 مع كل إعلان ثابت إضافي.
const (
Sunday = iota // 0
Monday // 1
Tuesday // 2
Wednesday // 3
Thursday // 4
Friday // 5
Saturday // 6
)
func main() {
fmt.Println(Sunday) // الناتج: 0
fmt.Println(Saturday) // الناتج: 6
}
يُعلن الكود أعلاه تعدادًا لأيام الأسبوع، حيث تبدأ iota
بالقيمة 0 داخل كتلة const
وتتزايد بمقدار واحد لكل إعلان لاحق.
5.3 نطاق الثوابت
نطاق الثوابت مشابه لنطاق المتغيرات. إذا تم تعريف ثابت داخل دالة، فإن نطاقه يقتصر على تلك الدالة. إذا تم تعريف ثابت خارج دالة (على مستوى عام)، فإن نطاقه هو الحزمة بأكملها، وإذا بدأ الحرف الأول بحرف كبير، يمكن الوصول إليه في حزم أخرى.
يساعد إدارة نطاق الثوابت في تقليل تلوث النطاق العام وتحسين قابلية صيانة وقراءة البرنامج.
const GlobalConst = "هذا ثابت عام"
func main() {
const LocalConst = "هذا ثابت محلي"
fmt.Println(GlobalConst) // هذا صالح
fmt.Println(LocalConst) // هذا صالح
}
func anotherFunction() {
// fmt.Println(LocalConst) // سيتسبب هذا في حدوث خطأ ترجمة: LocalConst غير مرئي في هذه الدالة
fmt.Println(GlobalConst) // هذا صالح
}
في هذا المثال، يُمكن الوصول فقط إلى LocalConst
داخل دالة main
، بينما يُمكن الوصول إلى GlobalConst
عبر الحزمة بأكملها.