Урок 12. Циклы

14 января 2023

Цикл for in

Само по себе слово цикл предполагает повторение каких-либо действий один или несколько раз. 

Циклы for-in используется для перебора значений всех видов коллекций. давайте посмотрим на его синтаксис:

for элемент коллекции in коллекция {

    выполнение какого-либо действия

}

После ключевого слова in мы определяем какую либо коллекцию, это может быть что угодно диапазоны чисел, элементы массива, элементы словарей, множеств, символов в строке и других последовательностей. А после ключевого слова for мы определяем последовательно элемент этой коллекции. 

Для понимания работы цикла, мы с вами возьмем несколько коллекций и разложим их на элементы:

				
					let names = ["Ann", "Tim", "Bob"]
"Ann" // первый элемент массива
"Tim" // второй элемент массива
"Bob" // третий элемент массива

let range = 1...3
1 // первый элемент диапазона
2 // второй элемент диапазона
3 // третий элемент диапазона

let semiClosedRange = 1..<3 // Здесь тройка не входит в диапазон
1 // первый элемент диапазона
2 // второй элемент диапазона
				
			

То есть эти значения мы будем перебирать в цикле. Это не функциональный код, я просто хочу вас навести на правильные мысли. 

Теперь обратимся снова к синтаксису цикла и постепенно попытаемся разложить наши коллекции:

for элемент коллекции in коллекция {

    выполнение какого-либо действия

}

После ключевого слова in мы должны определить коллекцию,  мы начнем с массива names, то есть мы будем перебирать имена:

for элемент коллекции in names {

    выполнение какого-либо действия

}

После ключевого слова for мы должны как то назвать элемент перебираемой коллекции, так как у нас это имена, то один элемент будет именем, так его и назовем:

for name in names {

    выполнение какого-либо действия

}

После ключевого слова for мы определили свойство name, оно будет в себе хранить значение одного элемента из коллекции, которую мы определяем после ключевого слова in

Возникает резонный вопрос, какое значение примет свойство name, если в коллекции не один элемент, а много?!

Все очень просто, оно будет принимать последовательно каждый элемент коллекции, каждую итерацию(проход) цикла. Звучит очень страшно, но на самом деле все просто. 

Итерация, это по сути выполнение блока кода в фигурных скобках цикла:

for name in names {

    Одна итерация означает одно выполнение кода внутри этих скобок

}

Количество таких итераций, будет зависеть от количества элементов коллекции, которую вы определите после ключевого слова in

Внутри фигурных скобок, вы можете использовать свойство name, оно доступно только в этой локальной зоне. Давайте выведем на консоль все имена из коллекции:

				
					let names = ["Ann", "Tim", "Bob"]
"Ann" // первый элемент массива
"Tim" // второй элемент массива
"Bob" // третий элемент массива

for name in names {
    print(name)
}
				
			

Запустим проект и посмотрим на консоль:

Обратите внимание что все имена располагаются с новой строки, то есть цикл каждую новую итерацию вызвал новый принт, с новыми данными. Справа вы можете видеть в круглых скобках 3 итерации, то есть блок кода в фигурных скобках был выполнен 3 раза. 

давайте проследим каждую итерацию нашего цикла. 

Первая итерация, свойство name инициализируется первым элементом из коллекции:


Вторая итерация, свойство name инициализируется вторым элементом из коллекции:

Третья итерация будет последняя, так как элементов в коллекции больше нет, свойство name инициализируется третьим элементом из коллекции: