1 عرض للبيانات المشروطة

تعتبر البيانات المشروطة أدوات مهمة للتحكم في التدفق المنطقي للبرامج في عمليات البرمجة. في جolang، تعتبر البيانات المشروطة مشابهة لتلك المستخدمة في لغات البرمجة الأخرى، ولكنها تتمتع بخصائصها الخاصة. تتيح لنا هذه البيانات اتخاذ قرار بتنفيذ أي كود بناءً على الشروط الصحيحة أو الخاطئة، مما يزيد بشكل كبير من مرونة الكود وقابليته للصيانة.

2 بيان if

2.1 الاستخدام الأساسي لبيان if

بيان "if" هو البيان المشروط الأساسي في لغة جو. صيغتها كما يلي:

if الشرط {
    // الكود الذي يتم تنفيذه عندما يكون الشرط صحيحاً
}

إليك مثال بسيط:

package main

import "fmt"

func main() {
    x := 10
    if x > 5 {
        fmt.Println("x أكبر من 5")
    }
}

سيقوم هذا الكود بالتحقق ما إذا كانت قيمة "x" أكبر من 5، وإذا كانت كذلك، سيتم تنفيذ عملية الطباعة.

2.2 التعبيرات المشروطة

تتكون التعبيرات المشروطة من مشغلات المقارنة (مثل ==, !=, <, >, <=, >=) ومشغلات المنطق (مثل && (و), || (أو), ! (ليس)).

على سبيل المثال، للتحقق ما إذا كانت المتغير موجودًا ضمن نطاق معين:

y := 20
if y >= 10 && y <= 30 {
    fmt.Println("y بين 10 و 30")
}

تستخدم التعبير المشروط أعلاه مشغل المنطق && لضمان أن قيمة "y" بين 10 و 30.

2.3 بنية if...else و else if

عند عدم تحقق شرط "if"، يمكننا استخدام "else" لتنفيذ كتلة كود بديلة. يسمح "else if" لنا بفحص شروط متعددة. إليك مثال:

score := 88

if score >= 90 {
    fmt.Println("ممتاز")
} else if score >= 80 {
    fmt.Println("جيد")
} else if score >= 70 {
    fmt.Println("متوسط")
} else {
    fmt.Println("دون المتوسط")
}

سيقوم هذا الكود بطباعة تقييمات مختلفة بناءً على قيمة "score".

3 بيان switch

3.1 الصيغة الأساسية لبيان switch

البيان "switch" هو بيان فرعي مشروط مختصر أكثر، ويلائم بشكل خاص الحالات التي تتطلب تقييم قيم متعددة. الصيغة الأساسية للبيان "switch" كما يلي:

switch التعبير {
case القيمة1:
    // الكود الذي يتم تنفيذه عند تطابق القيمة1
case القيمة2:
    // الكود الذي يتم تنفيذه عند تطابق القيمة2
default:
    // الكود الذي يتم تنفيذه بشكل افتراضي
}

إذا تطابقت قيمة "التعبير" مع القيمة الموجودة بعد "case"، سيتم تنفيذ الكود الخاص بذلك.

3.2 الانتقال المتسلسل في "switch"

في بيان "switch" في جو، لا يحدث الانتقال التلقائي إلى الحالة التالية بشكل افتراضي ما لم يتم استخدام كلمة مفتاحيّة "fallthrough".

switch num {
case 1:
    fmt.Println("واحد")
    fallthrough
case 2:
    fmt.Println("اثنان")
default:
    fmt.Println("لا واحد ولا اثنان")
}

في الكود أعلاه، إذا كانت قيمة "num" تساوي 1، فإن برنامج سيستمر في تنفيذ الكود في "case 2" بسبب كلمة مفتاحيّة "fallthrough" التي تمت استخدامها.

3.3 تفريع الأنواع وتفريع مخصص

يدعم بيان "switch" أيضًا التفريع بناءً على أنواع المتغيرات، المعروف باسم تفريع الأنواع. بالإضافة إلى ذلك، يمكننا إنشاء شروط تفريع مخصصة أكثر تعقيدًا.

مثال على تفريع الأنواع:

var i interface{} = 1

switch i.(type) {
case int:
    fmt.Println("i هو عدد صحيح")
case float64:
    fmt.Println("i هو عدد عشري")
default:
    fmt.Println("i هو نوع آخر")
}

يمكن كتابة شروط تفريع مخصصة لتنفيذ نصوص تقييمية معقدة أكثر بحسب الحاجة.

4 تمرين عملي

في هذا القسم، سنعمق فهمنا وتطبيقنا للبيانات المشروطة في جو من خلال أمثلة محددة. من خلال التحديات البرمجية العملية، ستصبح أكثر براعة في استخدام بيانات "if" و"switch" لحل المشاكل في العالم الحقيقي.

حاسبة الدرجات

دعنا نكتب حاسبة درجات بسيطة. سيقوم هذا البرنامج بتحديد وإخراج الدرجة المقابلة استنادًا إلى الدرجة التي أدخلها المستخدم. معايير التقييم كما يلي:

  • A للدرجات 90 وأكثر
  • B للدرجات بين 80 و 89
  • C للدرجات بين 70 و 79
  • D للدرجات بين 60 و 69
  • F للدرجات أقل من 60

يمكننا استخدام إما بيان if أو بيان switch لتنفيذ هذه الوظيفة. لنلق نظرة أولاً على مثال باستخدام بيان if:

package main

import (
	"fmt"
)

func main() {
	var score int
	fmt.Print("الرجاء إدخال الدرجة: ")
	fmt.Scan(&score)

	if score >= 90 {
		fmt.Println("الدرجة: A")
	} else if score >= 80 {
		fmt.Println("الدرجة: B")
	} else if score >= 70 {
		fmt.Println("الدرجة: C")
	} else if score >= 60 {
		fmt.Println("الدرجة: D")
	} else {
		fmt.Println("الدرجة: F")
	}
}

في هذا الكود، نعلن أولاً متغير score لتخزين درجة الإدخال من المستخدم. نستخدم الدالة fmt.Scan للحصول على إدخال المستخدم. ثم نستخدم عدة بيانات if و else if لتحديد الدرجة المقابلة للدرجة ونستخدم الدالة fmt.Println لإخراج الدرجة.

الآن دعنا نلقي نظرة على مثال باستخدام بيان switch:

package main

import (
	"fmt"
)

func main() {
	var score int
	fmt.Print("الرجاء إدخال الدرجة: ")
	fmt.Scan(&score)

	switch {
	case score >= 90:
		fmt.Println("الدرجة: A")
	case score >= 80:
		fmt.Println("الدرجة: B")
	case score >= 70:
		fmt.Println("الدرجة: C")
	case score >= 60:
		fmt.Println("الدرجة: D")
	default:
		fmt.Println("الدرجة: F")
	}
}

في المثال الذي يستخدم بيان switch، تكون هيكلة الكود أكثر انضباطًا ووضوحًا. نحن لا نحتاج إلى استخدام العديد من بيانات if المتتالية؛ بدلاً من ذلك، نحدد مباشرة الشروط في كل حالة بعد بيان switch. سيتحرك الدرجة التي لا تطابق شرط الحالة السابقة تلقائيًا إلى الحالة التالية حتى تطابق الفرعية الشرطية المقابلة أو تصل إلى الحالة default، التي تطبع الدرجة F.

الآن بعد أن تعلمت كيفية استخدام if و switch للافتراضات الشرطية، جرب كتابة برنامجك الخاص وممارسة ذلك لتعزيز فهمك.

في القسم التالي، سنستمر في تقديم المزيد من المشاكل العملية لمساعدتك في تعزيز إتقانك للبيانات الشرطية في جولانغ.

يرجى ملاحظة أن الكود أعلاه لأغراض تعليمية. عند استخدامه في التطبيقات العملية، يجب مراعاة عوامل مثل تفاعل المستخدم ومعالجة الأخطاء لجعلها أكثر قوة.