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 تثبیت کنید.
لطفاً توجه داشته باشید که کد فوق برای اهداف آموزشی است. در استفاده از آن در برنامههای عملی، عواملی مانند تعامل با کاربر و رفع خطا باید مدنظر قرار گیرد تا محکمتر شود.