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:
for i := 0; i < 5; i++ {
fmt.Println(i)
}
// Natija: 0, 1, 2, 3, 4Har bir qism nima qilishi:
- •
i := 0— init: sikl boshlanishidan oldin bir marta ishga tushadi - •
i < 5— shart: har bir iteratsiyadan oldin tekshiriladi. Agar yolg'on bo'lsa, sikl to'xtaydi - •
i++— post: har bir iteratsiyadan keyin ishga tushadi (iga 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.
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.
// 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 = 0dan boshlab,maxRetriesgacha (lekin uni o'z ichiga olmagan holda) ishlaydiganforsikli yozing. - •2. Sikl ichida, agar
isuccessOnga teng bo'lsa,result = "success"deb belgilang. - •3. Sikldan keyin, agar
resulthali 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.
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
$ go run main.go
Kodingizni ishga tushiring