المتغيرات في لغة غو

ماهو المتغير

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

إعلان متغير

يتم إعلان المتغير في لغة غو عن طريق الكلمة المفتاحية 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 :=


شاهد أيضاً

comments powered by Disqus