GoDasturchi
Repeating Things

Repeating Things

Sikllar bir xil kodni bir necha marta ishga tushirish imkonini beradi. Go'da bitta sikl kalit so'zi bor: for. U hammasini o'zi boshqaradi.

Klassik for sikli

Eng ko'p ishlatiladigan shakli nuqta-vergul bilan ajratilgan uchta qismdan iborat:

example.go
for i := 0; i < 5; i++ {
	fmt.Println(i)
}
// Natija: 0, 1, 2, 3, 4

Har bir qism nima qilishi:

  • i := 0init: sikl boshlanishidan oldin bir marta ishga tushadi
  • i < 5shart: har bir iteratsiyadan oldin tekshiriladi. Agar yolg'on bo'lsa, sikl to'xtaydi
  • i++post: har bir iteratsiyadan keyin ishga tushadi (i ga 1 qo'shadi)

Demak bu sikl i ni 0 dan boshlaydi, uni chop etadi, 1 qo'shadi, u hali 5 dan kichikligini tekshiradi va takrorlaydi.

Erta qaytish, sikldan keyin fallback

Sikllar har bir iteratsiyada biror narsani tekshirganda foydali bo'ladi. Qiymat izlayotgan sikl ko'pincha ikkita chiqishni xohlaydi: moslikni topgan zahoti qaytish, va hech qachon topolmagan bo'lsa sikldan keyin zaxira (fallback) qiymatni qaytarish.

example.go
func firstMultiple(target, limit int) int {
	for i := 1; i < limit; i++ {
		if i%target == 0 {
			return i
		}
	}
	return -1 // hech narsa mos kelmadi
}

return -1 faqat sikl hech qanday moslikni topmasdan tugaganda ishga tushadi. Bu — zaxira (fallback).

Mana shu xatoga ehtiyot bo'ling: zaxirani else ichiga qo'yish.

example.go
// XATO: har safar birinchi iteratsiyada chiqib ketadi
for i := 1; i < limit; i++ {
	if i%target == 0 {
		return i
	} else {
		return -1
	}
}

else shoxobchasi birinchi iteratsiyada ishga tushadi va sikl boshqa hech qanday qiymatni tekshirishidan oldin qaytib ketadi. Muvaffaqiyatsizlik holati sikldan keyin bo'lishi kerak, muvaffaqiyat holati bilan juftlashtirilmasligi kerak.

>_ Exercise

Tasavvur qiling, siz tarmoq so'rovini qayta urinib ko'ryapsiz. result o'zgaruvchisi funksiya boshida bo'sh satr "" sifatida allaqachon e'lon qilingan, va funksiya uni allaqachon siz uchun qaytaradi.

Sizning vazifangiz:

  • 1. i = 0 dan boshlab, maxRetries gacha (lekin uni o'z ichiga olmagan holda) ishlaydigan for sikli yozing.
  • 2. Sikl ichida, agar i successOn ga teng bo'lsa, result = "success" deb belgilang.
  • 3. Sikldan keyin, agar result hali ham "" bo'lsa, result = "failed" deb belgilang.

Misollar:

  • retry(2, 5) → 2-urinishda muvaffaqiyatli bo'ladi, result "success" bo'ladi
  • retry(6, 5) → faqat 0 dan 4 gacha urinadi, 6 ga hech qachon yetmaydi, result "failed" bo'ladi
  • retry(0, 3) → birinchi urinishda muvaffaqiyatli bo'ladi, result "success" bo'ladi

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Klassik for sikli uchta qismdan iborat: init, shart, post. Uni tanadagi if bilan birlashtirsangiz, allaqachon ko'plab masalalarni yecha olasiz.

NEXT UP

Loop Variations

🔒🔒🔒🔒
OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Repeating Things

Sikllar bir xil kodni bir necha marta ishga tushirish imkonini beradi. Go'da bitta sikl kalit so'zi bor: for. U hammasini o'zi boshqaradi.

Klassik for sikli

Eng ko'p ishlatiladigan shakli nuqta-vergul bilan ajratilgan uchta qismdan iborat:

example.go
for i := 0; i < 5; i++ {
	fmt.Println(i)
}
// Natija: 0, 1, 2, 3, 4

Har bir qism nima qilishi:

  • i := 0init: sikl boshlanishidan oldin bir marta ishga tushadi
  • i < 5shart: har bir iteratsiyadan oldin tekshiriladi. Agar yolg'on bo'lsa, sikl to'xtaydi
  • i++post: har bir iteratsiyadan keyin ishga tushadi (i ga 1 qo'shadi)

Demak bu sikl i ni 0 dan boshlaydi, uni chop etadi, 1 qo'shadi, u hali 5 dan kichikligini tekshiradi va takrorlaydi.

Erta qaytish, sikldan keyin fallback

Sikllar har bir iteratsiyada biror narsani tekshirganda foydali bo'ladi. Qiymat izlayotgan sikl ko'pincha ikkita chiqishni xohlaydi: moslikni topgan zahoti qaytish, va hech qachon topolmagan bo'lsa sikldan keyin zaxira (fallback) qiymatni qaytarish.

example.go
func firstMultiple(target, limit int) int {
	for i := 1; i < limit; i++ {
		if i%target == 0 {
			return i
		}
	}
	return -1 // hech narsa mos kelmadi
}

return -1 faqat sikl hech qanday moslikni topmasdan tugaganda ishga tushadi. Bu — zaxira (fallback).

Mana shu xatoga ehtiyot bo'ling: zaxirani else ichiga qo'yish.

example.go
// XATO: har safar birinchi iteratsiyada chiqib ketadi
for i := 1; i < limit; i++ {
	if i%target == 0 {
		return i
	} else {
		return -1
	}
}

else shoxobchasi birinchi iteratsiyada ishga tushadi va sikl boshqa hech qanday qiymatni tekshirishidan oldin qaytib ketadi. Muvaffaqiyatsizlik holati sikldan keyin bo'lishi kerak, muvaffaqiyat holati bilan juftlashtirilmasligi kerak.

>_ Exercise

Tasavvur qiling, siz tarmoq so'rovini qayta urinib ko'ryapsiz. result o'zgaruvchisi funksiya boshida bo'sh satr "" sifatida allaqachon e'lon qilingan, va funksiya uni allaqachon siz uchun qaytaradi.

Sizning vazifangiz:

  • 1. i = 0 dan boshlab, maxRetries gacha (lekin uni o'z ichiga olmagan holda) ishlaydigan for sikli yozing.
  • 2. Sikl ichida, agar i successOn ga teng bo'lsa, result = "success" deb belgilang.
  • 3. Sikldan keyin, agar result hali ham "" bo'lsa, result = "failed" deb belgilang.

Misollar:

  • retry(2, 5) → 2-urinishda muvaffaqiyatli bo'ladi, result "success" bo'ladi
  • retry(6, 5) → faqat 0 dan 4 gacha urinadi, 6 ga hech qachon yetmaydi, result "failed" bo'ladi
  • retry(0, 3) → birinchi urinishda muvaffaqiyatli bo'ladi, result "success" bo'ladi

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Klassik for sikli uchta qismdan iborat: init, shart, post. Uni tanadagi if bilan birlashtirsangiz, allaqachon ko'plab masalalarni yecha olasiz.

NEXT UP

Loop Variations