Section 7

7-dars — Shartlar: if / else

if, ==, taqqoslash va mantiqiy operatorlar, bool, else if, else, nested if va return


Bu darsdan boshlab yangi loyiha — Go Bank (terminal banki). U menyu ko'rsatadi, foydalanuvchi tanlaydi: balansni ko'rish, pul qo'yish yoki yechish. Buning uchun dasturga qaror qabul qilishni o'rgatamiz — if orqali.

Menyu va tanlov

package main
 
import "fmt"
 
func main() {
	fmt.Println("Welcome to Go Bank!")
	fmt.Println("What do you want to do?")
	fmt.Println("1. Check balance")
	fmt.Println("2. Deposit money")
	fmt.Println("3. Withdraw money")
	fmt.Println("4. Exit")
 
	var choice int
	fmt.Print("Your choice: ")
	fmt.Scan(&choice)
 
	fmt.Println("Your choice:", choice)
}

choice ni int qildik, chunki u 1/2/3/4 — butun son. Endi har bir tanlovga boshqa-boshqa javob beramiz.


if — agar

if choice == 1 {
	fmt.Println("Your balance is", accountBalance)
}

if so'zidan keyin shart keladi. Shart rost (true) bo'lsa, { } ichidagi kod ishlaydi; yolg'on (false) bo'lsa — o'tkazib yuboriladi.

== va = — eng ko'p qilinadigan xato

BelgiNomiVazifasi
=qiymat berishx = 5 (x ga 5 ni ber)
==taqqoslashx == 5 (x 5 ga tengmi?)

Shartda tenglikni tekshirganda ikkita = (==) ishlatiladi. Bittasini (=) yozsangiz — xato. Adashtirmang.

Taqqoslash operatorlari

OperatorMa'nosi
==teng
!=teng emas
>katta
<kichik
>=katta yoki teng
<=kichik yoki teng

Mantiqiy operatorlar va bool

Shart natijasi har doim bool (true/false). Bir nechta shartni birlashtirish mumkin:

  • && (VA) — ikkala shart ham rost bo'lsa: yosh >= 18 && pasportBor
  • || (YOKI) — kamida bittasi rost bo'lsa: choice == 1 || choice == 2

Shart natijasini o'zgaruvchiga ham saqlash mumkin (uning tipi bool bo'ladi):

wantsCheckBalance := choice == 1 // bool
if wantsCheckBalance {
	// ...
}

Odatda qisqa shartni if bilan bir qatorda yozasiz, alohida o'zgaruvchi yaratmaysiz.


else if va else

Bir nechta holatni tekshirish uchun else if, hech qaysi mos kelmasa else:

var accountBalance = 1000.0
 
if choice == 1 {
	fmt.Println("Your balance is", accountBalance)
} else if choice == 2 {
	fmt.Print("Your deposit: ")
	var depositAmount float64
	fmt.Scan(&depositAmount)
	accountBalance += depositAmount
	fmt.Println("Balance updated! New amount:", accountBalance)
} else if choice == 3 {
	fmt.Print("Withdrawal amount: ")
	var withdrawalAmount float64
	fmt.Scan(&withdrawalAmount)
	accountBalance -= withdrawalAmount
	fmt.Println("Balance updated! New amount:", accountBalance)
} else {
	fmt.Println("Goodbye!")
}

Go yuqoridan pastga tekshiradi va birinchi mos kelgan blokni bajaradi, qolganlarini tashlab ketadi.

else if vs alohida if: else if faqat oldingi shart bajarilmaganda tekshiriladi. Ikkita alohida if yozsangiz, ikkinchisi har doim tekshiriladi. Har bir if da else if ko'p bo'lishi mumkin, lekin else bitta.

+= va -=

accountBalance += depositAmount — bu accountBalance = accountBalance + depositAmount ning qisqasi. Xuddi shunday -= ayiradi. accountBalance ni 1000.0 (.0 bilan) yozdik — float64 bo'lsin, foydalanuvchi 5.5 ham qo'sha olsin.


Ichma-ich (nested) if va return

if ichida yana if bo'lishi mumkin — masalan pulni tekshirish (validatsiya) uchun:

} else if choice == 3 {
	fmt.Print("Withdrawal amount: ")
	var withdrawalAmount float64
	fmt.Scan(&withdrawalAmount)
 
	if withdrawalAmount <= 0 {
		fmt.Println("Invalid amount. Must be greater than 0.")
		return
	}
 
	if withdrawalAmount > accountBalance {
		fmt.Println("Invalid amount. You can't withdraw more than you have.")
		return
	}
 
	accountBalance -= withdrawalAmount
	fmt.Println("Balance updated! New amount:", accountBalance)
}

return funksiyani (bu yerda main ni) darhol to'xtatadi — undan keyingi kod umuman bajarilmaydi. Ya'ni noto'g'ri summada xabar chiqarib, dasturdan chiqib ketamiz. Bu — "erta to'xtatish", kodni toza qiladi.

main hech narsa qaytarmaydi, lekin bo'sh return (qiymatsiz) bemalol ishlaydi — u shunchaki bajarilishni to'xtatadi.


O'zingiz sinab ko'ring

  1. Menyuni yozing, choice == 1 bo'lganda balansni chiqaring.
  2. 2 (deposit) va 3 (withdraw) holatlarini else if bilan qo'shing.
  3. Depozit uchun tekshiruv qo'shing: depositAmount <= 0 bo'lsa, xato chiqarib return.
  4. == o'rniga adashib = yozib ko'ring — Go qanday xato beradi?
  5. accountBalance := 1000 (.0 siz) yozsangiz, foydalanuvchi 5.5 qo'sha oladimi? Sinab ko'ring.

6-dars · → 8-dars — Tsikllar: for