الاثنين، 30 أبريل 2012

تعلم لغة البرمجة Go بالعربي ( الدرس السابع )

بسم الله الرحمن الرحيم

في هذا الدرس " أن شاء الله " سوف تتعلم أستخدام جملة القرار switch بالأمثلة , تستخدم جملة switch في تحديد الأوامر المراد تنفيذها في عدة حالات أو مقارنات لقيمة متغير أو نتائج دالة , و سأستخدم في المثال هذا النص البرمجي من موقع go tour :

package main

import (

    "fmt"

    "runtime"
)

func main() {

    fmt.Print("Go runs on ")

    switch os := runtime.GOOS; os {

    case "darwin":

        fmt.Println("OS X.")

    case "linux":

        fmt.Println("Linux.")

    default:

        // freebsd, openbsd,

        // plan9, windows...

        fmt.Printf("%s.", os)

    }

}


في هذا النص أستدعينا الدالة GOOS من المكتبة البرمجية runtime , و التي تعيد قيمة نصية لأسم نظام التشغيل و من ثم أستخدمنا switch لطباعة رسالة للمستخدم حسب أسم نظام التشغيل :


    switch os := runtime.GOOS; os {

    case "darwin":

        fmt.Println("OS X.")

    case "linux":

        fmt.Println("Linux.")

    default:

        fmt.Printf("%s.", os)

    }


لنبدأ في الشرح بالسطر الأول , تلاحظ أننا قمنا بالتصريح عن المتغير os الذي يحتوي على القيمة المرتجعة من الدالة GOOS في نفس السطر الخاص ببداية switch  مع فصل بين التصريح عن المتغير و المتغير بفاصلة منقوطة :


    switch os := runtime.GOOS; os {


كما يجب أن أنبه على أن أستخدام القوسين أجباري في لغة Go كما يجب كتابة بداية القوسين في نفس السطر الذي توجد فيه الكلمة المفتاحية switch و إلا يظهر لك خطأ في وقت الترجمة "Compiling" .

بعد التصريح عن الجملة switch و تعيين المتغير الذي سيتم عمليات المقارنة على قيمته , يأتي دور الكلمة المفتاحية case :


    case "darwin":

        fmt.Println("OS X.")


تقوم case بمقارنة قيمة المتغير os بالقيمة "darwin" و في حالة المطابقة يتم طباعة الجملة "OS X." , إذا كنت من مبرمجي لغة C أو ++C فأكيد أنك تبحث عن الكلمة المفتاحية break بعد نهاية كل مقارنة , و للذين ليس لديهم فكرة عن فائدة break أريد أشرح الفرق فيما لو قمنا بترجمة جملة switch الخاصة باللغة go في مترجم لغة C :


    switch os := runtime.GOOS; os {

    case "darwin":

        fmt.Println("OS X.")

    case "linux":

        fmt.Println("Linux.")

    default:

        // freebsd, openbsd,

        // plan9, windows...

        fmt.Printf("%s.", os)

    }


سيقوم البرنامج بعملية المقارنة الأولى و في حالة نجاح عملية المقارنة سيقوم بتنفيذ الكود الموجود بعد المقارنة و سيستمر في التنفيذ و يتنفذ الجملة التالية الخاصة بمقارنة التالية مباشرة و لن يتوقف إلى أن يصل للكلمة المفتاحية break , أما في لغة go فالعكس يتم تطبيقه أي أن التطبيق يتوقف عن المقارنة التالية المبتدأ بالكلمة  المفتاحية case .

و لكن في بعض الحالات يرغب المبرمج في أختصار النص البرمجي و كتابة الأوامر لحالتين بدون التكرار , لذا قام المطورون للغة Go بأضافة الكلمة المفتاحية fallthrough  و أستخدمها كالتالي :


switch i {

case 0: fallthrough

case 1:

fmt.Println("Hello")

}

في المقارنة الأولى قمنا بأستخدام الكلمة fallthrough مما يعني بأن البرنامج سيقوم بتنفيذ الأوامر الموجودة في المقارنة التالية .

و الأن لختام جملة switch و هي الكلمة البرمجية default و تستخدم في حالة عدم مطابقة قيمة المتغير لأي من المقارنات , و يتم أستخدمها في نهاية جملة switch كالتالي :


   default:

        // freebsd, openbsd,

        // plan9, windows...

        fmt.Printf("%s.", os)

    }


و في نهاية هذا الدرس أريد أن أطلب منك أخي القارىء أذا كان عند أي أستفسار أو تصحيح فلا تتردد , و لا تنسونا من صالح دعواتكم .




هناك تعليق واحد: