1 مروری بر اظهارات شرطی

اظهارات شرطی ابزارهای مهمی برای کنترل جریان منطقی برنامه‌ها در برنامه‌نویسی هستند. در زبان Golang، اظهارات شرطی مشابه دیگر زبان‌های برنامه‌نویسی هستند، اما ویژگی‌های خود را دارند. آن‌ها به ما امکان تصمیم‌گیری در مورد اجرای کد براساس شرایط درست یا غلط می‌دهند که انعطاف‌پذیری و قابلیت نگهداری کد را به شدت افزایش می‌دهند.

2 اظهاریه if

2.1 استفاده اولیه از اظهاریه if

اظهاریه if ساده‌ترین اظهاریه شرطی در زبان Go است. دستور زیر نحوه نوشتار اظهاریه if را نشان می‌دهد:

if condition {
    // کد برای اجرا وقتی شرط درست است
}

یک مثال ساده:

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 expression {
case value1:
    // کد برای اجرا وقتی مقدار مطابقت دارد value1
case value2:
    // کد برای اجرا وقتی مقدار مطابقت دارد value2
default:
    // کد برای اجرا به صورت پیش‌فرض
}

اگر مقدار expression با مقداری که در ادامه case آمده مطابقت داشت، بلوک کد مربوطه اجرا خواهد شد.

3.2 switch با فراگیری

در اظهاریه switch Go، هر شاخه به صورت پیش‌فرض به شاخه بعدی نمی‌اندازد مگر این‌که از کلمه کلیدی fallthrough استفاده شود.

switch num {
case 1:
    fmt.Println("یک")
    fallthrough
case 2:
    fmt.Println("دو")
default:
    fmt.Println("هیچکدام نه یک و نه دو")
}

در کد بالا، اگر num برابر با 1 باشد، حتی اگر مطابقت با case 1 داشته باشد، به دلیل وجود کلمه کلیدی fallthrough، برنامه ادامه می‌دهد و کد در case 2 را اجرا کرده و "دو" را چاپ می‌کند.

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 تمرین عملی

در این بخش، از طریق مثال‌های خاص، ما قصد داریم درک و کاربرد اظهارات شرطی در Golang را از طریق چالش‌های برنامه‌نویسی عملی عمیق‌تر کنیم. از طریق چالش‌های برنامه‌نویسی عملی، شما با استفاده از اظهارات if و switch برای حل مسائل واقعی‌مانند ماهرتر می‌شوید.

ماشین حساب نمره

یک ماشین حساب ساده برای نمره بندی بنویسیم. این برنامه براساس نمره‌ای که توسط کاربر وارد می‌شود، نمره متناظر را تعیین و خروجی می‌دهد. معیارهای نمره‌بندی به شرح زیر است:

  • A برای نمرات ۹۰ و بالاتر
  • B برای نمرات بین ۸۰ و ۸۹
  • C برای نمرات بین ۷۰ و ۷۹
  • D برای نمرات بین ۶۰ و ۶۹
  • F برای نمرات زیر ۶۰

می‌توانیم از یک عبارت 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 و else if پشت‌سرهم نداریم؛ به جای آن، شرایط را مستقیماً در هر case پس از switch مشخص می‌کنیم. نمره‌ای که با شرط case قبلی مطابقت نداشته باشد، به طور خودکار به case بعدی منتقل می‌شود تا به شرط مطابقتی متناظر برسد یا تا به default برسد که نمره F را چاپ می‌کند.

حال که یاد گرفتید چگونه از if و switch برای اظهارات شرطی استفاده کنید، سعی کنید برنامه خود را بنویسید و تمرین کنید تا درک خود را از آن عمیق‌تر کنید.

در بخش بعدی، ما ادامه مسائل عملیاتی بیشتری را معرفی خواهیم کرد تا به شما کمک کنیم تا استحکام خود را در استفاده از اظهارات شرطی در Golang تثبیت کنید.

لطفاً توجه داشته باشید که کد فوق برای اهداف آموزشی است. در استفاده از آن در برنامه‌های عملی، عواملی مانند تعامل با کاربر و رفع خطا باید مدنظر قرار گیرد تا محکم‌تر شود.