الأساسيات

المتغيرات var

  • ماهو المتغير

    المتغير هو عبارة عن “تسمية/اسم” يتم إعطاؤه لمكان معين في الذاكرة حيث يُخزن فيه قيمة لها نوع معين (نص, رقم …الخ)
    وفي لغة البرمجة يوجد عدة طرق متشابهة لكتابة/إعلان المتغيرات .

 

  • إعلان متغير

    يتم إعلان المتغير في لغة غو عن طريق الكلمة المفتاحية var وثم اسم المتغير name وثم نوع هذا المتغير type
    “حيث تخالف لغة غو الطريقة التقليدية بإعلان المتغيرات في لغات البرمجة الشهيرة, ففي اللغات الاخرى يتم اعلان نوع المتغير أولاً وثم اسمه, أما في لغة غو يتم إعلان اسم المتغير وثم نوعه”

package main

import "fmt"

func main() {
// إعلان متغير ونوعه, بدون قيمة أولية
var age int 

fmt.Println("my age is", age)
}

نلاحظ أن المتغير ذو الاسم age نوعه عددي/رقمي int, ولم نسند له قيمة أولية, ولذلك تقوم لغة غو بإسناد قيمة صفرية له, حيث أن قيمة المتغير age الان هي “صفر”
حيث أن الكود السابق سيطبع لنا

"my age is 0 "

وطالما أن المتغير قد سبق أن تم تعريفه وإعلان نوعه, فلا داعي لفعل ذلك مجدداً, ويمكننا أن نسند له قيمة مباشرة كالاتي :

package main

import "fmt"

func main() {

// إعلان متغير ونوعه, بدون قيمة أولية
var age int 

fmt.Println("my age is", age)

// إسناد القيمة الرقمية 25 للمتغير بعد أن تم إعلانه سابقاً
age = 25 
fmt.Println("my new age is", age)
}

والنتيجة

"my new age is 25"
  • إعلان متغير جديد مع إسناد قيمة أولية

ويمكن أيضاً أن نسند قيمة أولية للمتغير عند لحظة تعريفه/إعلانه

package main

import "fmt"

func main() {
// إعلان المتغير مع قيمة أولية Firas
var name string = "Firas" 

fmt.Println("my name is ", name)
}

والنتيجة

"my name is Firas"

نلاحظ من الأمثلة السابقة أن في لغة غو لا داعي لاستخدام الفاصلة المنقوطة ; لإنهاء التصريحات Statements

  • أنواع البيانات في المتغيرات

اذا كان للمتغير قيمة أولية عند إعلانه, ستكون لغة غو قادرة تلقائياً على التعرف على نوع بيانات المتغير من خلال نوع بيانات قيمته الأولية, ولذلك يمكننا أن نهمل ذكر نوع المتغير type

فمثلاً في المثال السابق يمكننا إهمال كتابة نوع المتغير (string) وسيعمل البرنامج بشكل طبيعي بدون أخطاء

مع الانتباه والحذر حيث أن هذه الحالة تنطبق فقط عندما يكون للمتغير قيمة أولية, أما في المثال الأول نلاحظ ان المتغير age ليس له قيمة أولية ولذلك إذا عرفنا المتغير بدون ذكر نوع بياناته سينتج لنا خطأ .

  • إعلان عدة متغيرات بآن واحد

    يمكننا إعلان عدة متغيرات بجملة تعريف واحدة (شبيهة بلغة بايثون) كالآتي

package main

import "fmt"

func main() {

 // المتغير width والمتغير height

var width, height int = 100, 50

fmt.Println("width is", width, "height is", height)
}

وطالما أن للمتغيرات قيمة أولية فيمكننا إهمال ذكر نوعها في جملة الإعلان

package main

import "fmt"

func main() {
//"int" is dropped
var width, height = 100, 50 

fmt.Println("width is", width, "height is", height)
}

مثال على إعلان عدة متغيرات بدون قيمة أولية, ثم إسناد قيمة لاحقاً

package main

import "fmt"

func main() {
var width, height int
fmt.Println("width is", width, "height is", height)
width = 100
height = 50
fmt.Println("new width is", width, "new height is ", height)
}

والنتيجة

width is 0 height is 0
new width is 100 new height is 50
  • إعلان عدة متغيرات ذات أنواع بيانات مختلفة بآن واحد

لاحظ سابقاً أننا عندما أعلنا المتغيرين width و height كان لهما نفس نوع البيانات وهو int
ولكن ماذا اذا أردنا إعلان عدة متغيرات ذات أنواع مختلفة فيما بينها ؟

يمكننا ذلك من خلال الصيغة التالية

var (
name = initialvalue1,
age = initialvalue2
)

مثال

package main

import "fmt"

func main() {
var (
name = "Firas"
age = 25
)
fmt.Println("my name is", name, ", age is", age)
}

والنتيجة

my name is Firas , age is 25
  • إعلان المتغيرات بشكل مختصر Shorthand

ويوجد طريقة اخرى مختصرة لإعلان المتغيرات عبر الصيغة الاتية

name := initialvalue

مثال

package main

import "fmt"

func main() {
//shorthand declaration
name, age := "Firas", 29 

fmt.Println("my name is", name, "age is", age)
}

ملاحظة: عند استخدام الطريقة المختصرة في إعلان المتغيرات, علينا مراعاة إسناد قيم أولية لها دائماً
ويمكننا استخدام الطريقة المختصرة سواء في إعلان متغيرات جديدة أو تعديل قيم متغيرات قد سبق إعلانها سابقاً*

ملاحظة: الطريقة المختصرة لايُمكن استخدامها إلا ضمن نطاق الدوال Function ( في المثال السابق تمت الطريقة المختصرة ضمن الدالة main مثلاً )

مثال آخر

package main

import "fmt"

func main() {
// declare variables a and b
a, b := 20, 30 
fmt.Println("a is", a, "b is", b)
// b is already declared but c is new
b, c := 40, 50 
fmt.Println("b is", b, "c is", c)
}

والنتيجة

a is 20 b is 30
b is 40 c is 50

ملاحظة: يمكننا استخدام الطريقة المختصرة بشرط أن يكون متغير واحد على الأقل جديد وغير معلن سابقاً

فمثلاً المثال التالي سينتج خطأ

package main

import "fmt"

func main() {
 //a and b declared

a, b := 20, 30

fmt.Println("a is", a, "b is", b)

//error, no new variables

a, b := 40, 50
}

وسينتج لنا رسالة الخطأ التالية

no new variables on left side of :=
ملاحظة: يمكنك تشغيل أكواد وأمثلة لغة غو من خلال GoLang Playground أو GoPlay.Space .

نبذة عن الكاتب

Firas M. Darwish

Software Engineer, PHP/Laravel, C#, GoLang, founder of ArGoLang.com & others ..

شاركنا رأيك :)