Flatten Nested Code
Chuqur ichma-ich kodni tekislang
"Avoid Else After Return" darsida ko'rgan naqshni endi chuqurroq: ko'p qavatli if ichida if — kodni o'qishni qiyinlashtiradi. Erta return va "guard clause"lar bilan uni tekislash mumkin.
package main
import "fmt"
type Order struct {
Items int
Paid bool
Address string
}
// Chuqur ichma-ich (3 daraja)
func canShipOld(o Order) bool {
if o.Items > 0 {
if o.Paid {
if o.Address != "" {
return true
}
}
}
return false
}
// Tekislangan: guard clause'lar, 1 daraja
func canShip(o Order) bool {
if o.Items == 0 {
return false
}
if !o.Paid {
return false
}
if o.Address == "" {
return false
}
return true
}
func main() {
o := Order{Items: 2, Paid: true, Address: "Toshkent"}
fmt.Println(canShip(o))
}canShipOld va canShip bir xil natija beradi, lekin canShipda har bir shart alohida, tushunarli "agar bu shart bajarilmasa — rad et" ko'rinishida. Bu naqsh katta funksiyalarda ayniqsa foydali: 4-5 qavatli ifni o'qish (va debug qilish) juda qiyin, lekin bir xil chuqurlikdagi ketma-ket shartlarni o'qish tez va oson.
>_ Exercise
Chuqur ichma-ich shartni guard clause'lar bilan tekislang.
- •canVote(age int, isCitizen bool, registered bool) bool yozing
- •guard clause'lar bilan (ichma-ich if'siz): age >= 18, isCitizen, registered — hammasi true bo'lsagina true qaytaring
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Ko'p shartli tekshiruvlarni ichma-ich if o'rniga, ketma-ket guard clause'lar bilan yozish kodni bir xil chuqurlikda, o'qish oson qiladi.
NEXT UP
Simplify Boolean Logic
$ go run main.go
Kodingizni ishga tushiring