بسم الله الرحمن الرحيم
في هذا الدرس " أن شاء الله " سوف تتعلم أستخدام جملة القرار switch بالأمثلة , تستخدم جملة switch في تحديد الأوامر المراد تنفيذها في عدة حالات أو مقارنات لقيمة متغير أو نتائج دالة , و سأستخدم في المثال هذا النص البرمجي من موقع go tour :
لنبدأ في الشرح بالسطر الأول , تلاحظ أننا قمنا بالتصريح عن المتغير os الذي يحتوي على القيمة المرتجعة من الدالة GOOS في نفس السطر الخاص ببداية switch مع فصل بين التصريح عن المتغير و المتغير بفاصلة منقوطة :
كما يجب أن أنبه على أن أستخدام القوسين أجباري في لغة Go كما يجب كتابة بداية القوسين في نفس السطر الذي توجد فيه الكلمة المفتاحية switch و إلا يظهر لك خطأ في وقت الترجمة "Compiling" .
بعد التصريح عن الجملة switch و تعيين المتغير الذي سيتم عمليات المقارنة على قيمته , يأتي دور الكلمة المفتاحية case :
تقوم case بمقارنة قيمة المتغير os بالقيمة "darwin" و في حالة المطابقة يتم طباعة الجملة "OS X." , إذا كنت من مبرمجي لغة C أو ++C فأكيد أنك تبحث عن الكلمة المفتاحية break بعد نهاية كل مقارنة , و للذين ليس لديهم فكرة عن فائدة break أريد أشرح الفرق فيما لو قمنا بترجمة جملة switch الخاصة باللغة go في مترجم لغة C :
سيقوم البرنامج بعملية المقارنة الأولى و في حالة نجاح عملية المقارنة سيقوم بتنفيذ الكود الموجود بعد المقارنة و سيستمر في التنفيذ و يتنفذ الجملة التالية الخاصة بمقارنة التالية مباشرة و لن يتوقف إلى أن يصل للكلمة المفتاحية break , أما في لغة go فالعكس يتم تطبيقه أي أن التطبيق يتوقف عن المقارنة التالية المبتدأ بالكلمة المفتاحية case .
و لكن في بعض الحالات يرغب المبرمج في أختصار النص البرمجي و كتابة الأوامر لحالتين بدون التكرار , لذا قام المطورون للغة Go بأضافة الكلمة المفتاحية
في المقارنة الأولى قمنا بأستخدام الكلمة fallthrough مما يعني بأن البرنامج سيقوم بتنفيذ الأوامر الموجودة في المقارنة التالية .
و الأن لختام جملة switch و هي الكلمة البرمجية default و تستخدم في حالة عدم مطابقة قيمة المتغير لأي من المقارنات , و يتم أستخدمها في نهاية جملة switch كالتالي :
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 لطباعة رسالة للمستخدم حسب أسم نظام التشغيل :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)
}
}
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")
}
case 0: fallthrough
case 1:
fmt.Println("Hello")
}
في المقارنة الأولى قمنا بأستخدام الكلمة fallthrough مما يعني بأن البرنامج سيقوم بتنفيذ الأوامر الموجودة في المقارنة التالية .
و الأن لختام جملة switch و هي الكلمة البرمجية default و تستخدم في حالة عدم مطابقة قيمة المتغير لأي من المقارنات , و يتم أستخدمها في نهاية جملة switch كالتالي :
default:
// freebsd, openbsd,
// plan9, windows...
fmt.Printf("%s.", os)
}
و في نهاية هذا الدرس أريد أن أطلب منك أخي القارىء أذا كان عند أي أستفسار أو تصحيح فلا تتردد , و لا تنسونا من صالح دعواتكم .
شكراً لك
ردحذف