Loading...

Циклдер

 

Циклдер белгилүү бир шартка жараша белгилүү бир аракеттерди көп жолу аткарууга мүмкүндүк берет. Чынында, Go программасында бир гана цикл бар, ал көп формада боло алат. Бул цикл төмөнкү расмий аныктамага ээ:

1

2

3

for [инициализация счетчика]; [условие]; [изменение счетчика]{

    // действия

}

Мисалы, циклди колдонуп сандардын квадраттарын чыгаралы:

1

2

3

4

5

6

7

8

9

package main

import "fmt"

 

func main() {

     

    for i := 1; i < 10; i++{

        fmt.Println(i * i)

    }

}

for циклинин декларациясы үч бөлүккө бөлүнгөн. Биринчиден, эсептегич инициализацияланат: i := 1. Чынында, ал цикл ичинде колдонула турган өзгөрмөнүн жарыясын билдирет. Бул учурда, баштапкы мааниси 1 болгон эсептегич i.

Экинчи бөлүк шартты билдирет: i < 10. Бул шарт чын болсо, башкача айтканда, чындыкка кайтарылса, цикл улана берет.

Үчүнчү бөлүгү эсептегичтин бир өзгөрүшүн (көбөйтүлүшүн) билдирет.

Циклдин корпусунда i санынын квадраты консолдо көрсөтүлөт.

Ошентип, цикл iнин мааниси 10го барабар болмоюнча 9 жолу иштейт. Жана ар бир жолу бул маани 1ге көбөйөт. Циклдин ар бир өзүнчө өтүшү итерация деп аталат. Башкача айтканда, бул учурда 9 кайталоо болот. Натыйжада, биз төмөнкү консолдук натыйжаны алабыз:

Циклди жарыялоодо бардык шарттарды көрсөтүүнүн кереги жок. Мисалы, сиз өзгөрмө декларациясын сыртка жылдырсаңыз болот:

1

2

3

4

var i = 1

for ; i < 10; i++{

    fmt.Println(i * i)

}

Сиз циклдин өзүндөгү эсептегичтин өзгөрүшүн алып салып, бир гана шартты калтырсаңыз болот:

1

2

3

4

5

var i = 1

for ; i < 10;{

    fmt.Println(i * i)

    i++

}

Эгерде цикл шартты гана колдонсо, анда аны төмөнкүдөй кыскартууга болот:

1

2

3

4

5

var i = 1

for i < 10{

    fmt.Println(i * i)

    i++

}

Insted Loops

Циклдерди уя салса болот, б.а. башка циклдердин ичинде. Мисалы, көбөйтүү таблицасын консолго басып чыгарыңыз:

1

2

3

4

5

6

7

8

9

10

11

12

package main

import "fmt"

 

func main() {

     

    for i := 1; i < 10; i++{

        for j := 1; j < 10; j++{

            fmt.Print(i * j, "\t")

        }

        fmt.Println()

    }

}

1 2 3 4 5 6 7 8 9           
2 4 6 8 10 12 14 16 18                   
3 6 9 12 15 18 21 24 27                
4 8 12 16 20 24 28 32 36              
5 10 15 20 25 30 35 40 45            
6 12 18 24 30 36 42 48 54            
7 14 21 28 35 42 49 56 63            
8 16 24 32 40 48 56 64 72            
9 18 27 36 45 54 63 72 81

Массивдердин үстүнөн кайталоо

Массивдерди кайталоо үчүн for циклинин төмөнкү формасын колдонсоңуз болот:

1

2

3

for индекс, значение := range массив{

    // действия

}

Итерациялоодо массивдеги элементтин индексин жана бул элементтин маанисин өзүнчө ала алабыз. Мисалы, саптардын массивинин үстүнөн кайталайлы:

1

2

3

4

var users = [3]string{"Tom", "Alice", "Kate"}

for index, value := range users{

    fmt.Println(index, value)

}

Консол чыгаруу:

0 Том
1 Алиса
2 Кейт

Эгерде биз элементтин баалуулуктарын же индекстерин колдонууну пландабасак, анда анын ордуна сызыкчаны көрсөтө алабыз. Мисалы, бизге индекстердин кереги жок:

1

2

3

for _, value := range users{

    fmt.Println(value)

}

Бирок массивди кайталоо үчүн for циклинин стандарттык версиясын да колдонсоңуз болот:

1

2

3

4

var users = [3]string{"Tom", "Alice", "Kate"}

for i:= 0; i < len(users); i++{

    fmt.Println(users[i])

}

Бул учурда эсептегич i индекстин ролун ойнойт. Цикл эсептегич i массивдин узундугуна барабар болмоюнча аткарылат, аны len() функциясы аркылуу алууга болот

бузуу жана улантуу билдирүүлөрү

Белгилүү шарттарда циклдин учурдагы итерациясын бүтүрүп, циклдин бардык инструкцияларын аткарбай, дароо кийинки итерацияга өтүү керек болгондо, кырдаал келип чыгышы мүмкүн. Бул учурда, сиз улантуу операторун колдоно аласыз . Мисалы, массив оң жана терс сандарды камтышы мүмкүн. Биз оң сандардын суммасын гана каалайбыз дейли, ошондуктан терс санга туш болсок, кийинки итерацияны улантуу менен уланта алабыз:

1

2

3

4

5

6

7

8

9

он

var numbers = [10]int{1, -2, 3, -4, 5, -6, -7, 8, -9, 10}

var sum = 0

 

for _, value := range numbers{

    if value < 0{

        continue        // переходим к следующей итерации

    }

    sum += value

}

fmt.Println("Sum:", sum)    // Sum: 27

break оператору циклден толугу менен чыгат :

1

2

3

4

5

6

7

8

9

10

var numbers = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

var sum = 0

 

for _, value := range numbers{

    if value > 4{

        break       // если число больше 4 выходим из цикла

    }

    sum += value

}

fmt.Println("Sum:", sum)    // Sum: 10