GoDasturchi
Flatten Nested Code

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.

example.go
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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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.

Hints (0/3)

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