Урок 16. Функции.
Часть 1
Главная / Уроки / Страница блока Основы / Урок 16. Функции. Часть1
14 Февраля 2023
Определение функции
Вы подошли к одной из самых важных частей в обучении основ программирования. Это достаточно сложная тема, поэтому наберитесь терпения и постарайтесь уделить ей больше времени чем обычно. Так же старайтесь в playground записывать каждое действие и смотреть как отрабатывает код.
Что же такое Функция? Это блок кода, у которого есть имя и он может быть использован в различных частях программы.
Звучит не так просто, но давайте разбираться.
Начнем с простого примера:
var numbers = [5, 4, 3.5, 8, 9.2] // (1)
for number in numbers { // (2)
print(number)
}
numbers.append(14.9) // (3)
for number in numbers { // (4)
print(number)
}
(1) Создаем массив с типом Double, так как там есть значения с плавающей точкой, то этот тип определяется по умолчанию и прописывать его явно не нужно.
(2) При помощи цикла for перебираем массив и выводим каждое значение на консоль.
(3) добавляем элемент в массив, используя метод append()
(4) И снова перебираем массив и выводим каждый элемент на консоль.
Внимательно посмотрите на код. В двух местах мы дублируем один и тот же код:
Это два абсолютно одинаковых блока кода, а хорошие программисты не любят когда что то повторяется, это же в два раза больше работы! И следуя определению функции, мы можем этому блоку дать имя и вызывать его по имени в нужных нам местах.
Имя должно быть осмысленным и нести в себе информацию о назначении функции. Когда мы называем свойства, то мы используем существительные, а когда нам нужно назвать функцию, то здесь мы должны использовать глаголы, потому что это действие.
В нашем случае, блок кода занимается перебором массива и выводом элементов на консоль. Суть метода получить каждый элемент и вывести его на консоль, соответсвенно имя можно определить как printEachElementOfArray, при этом артикли в названии можно опускать.
Прежде чем мы реализуем данную функцию, давайте сперва посмотрим на синтаксис ее самого простого типа:
func имя функции() {
блок кода
}
Первым пишется ключевое слово func, так система понимает, что вы собираетесь реализовать функцию. Далее вы прописываете имя функции, то которое отражает суть блока кода внутри функции, после имени прописываете пустые скобки, чуть позже я расскажу зачем они нужны. Ну и завершающим элементом являются фигурные скобки, в которых мы определяем тот самый блок кода, который не хотим дублировать.
Наша функция будет выглядеть следующим образом:
func printEachElementOfArray() {
for number in numbers {
print(number)
}
}
Обратите внимание на вложенность, очень частая ошибка начинающих разработчиков, это не понимание где скобки начинаются и где заканчиваются, поэтому первое время наблюдайте что в чем лежит.
Не забывайте, что каждые фигурные скобки определяют свою локальную зону видимости. Что бы проследить где начинается и заканчивается определенная зона, нужно кликнуть по открывающей или закрывающей фигурной скобке, блок за который она отвечает будет выделен.

Мы с вами реализовали функцию, но ни как к ней не обращаемся. То есть она не будет работать пока мы к ней не обратимся. Это можно сравнить с свойствами, которые мы создаем, мы определяем их через ключевое слово var или let, и если они нам нужны дальше в коде, мы к ним обращаемся по имени уже без ключевых слов. Здесь мы тоже определили функцию через ключевое слово func, и что бы к ней обратиться ключевое слово не нужно
Посмотрим как это сработает с нашим кодом:
var numbers = [5, 4, 3.5, 8, 9.2]
func printEachElementOfArray() { // (1)
for number in numbers {
print(number)
}
}
printEachElementOfArray() // (2)
numbers.append(14.9) // (3)
printEachElementOfArray() // (4)
(1) Объявляем функцию, то есть создаем.
(2) Вызываем функцию, то есть запускаем блок внутри нее, а именно начинаем перебирать коллекцию и выводить каждый элемент на консоль.
(3) Добавляем элемент в массив.
(4) Снова вызываем функцию, то есть повторно запускаем блок кода внутри нее.
Таким образом вы можете в любой точке вашего кода вызвать эту функцию, и у вас будет выполняться блок кода с перебором.
Реализация функции (Объявление функции) – по сути ее создание, когда пишем ключевое слово func имя() { код }
Вызов функции – обращаемся к функции по ее имени и в конце определяем круглые скобки, без ключевого слова func: printEachElementOfArray()
Исполнение кода – выполнение компилятором кода.

Давайте рассмотрим еще один пример. Нам нужно объявить функцию, которая будет будет находить рандомное целое число и выводить его на консоль. Первое что мы должны сделать, так это придумать название для функции. Она будет заниматься тем что выводить на консоль рандомное значение, значит так и назовем printRandomInt
func printRandomInt() {
}
Второе что нам следует сделать это продумать логику. Создадим новое свойство, которому присвоим рандомное значение использовав метод random:
func printRandomInt() {
let randomInt = Int.random(in: 1...10)
}
Наше рандомное значение будет в диапазоне от 1 до 10. Все что нам осталось, это вывести данное свойство на консоль, для этого у нас есть print:
Свойство randomInt будет локальным, потому что находится внутри фигурных скобок, то есть за пределами этой функции, мы его не увидим.

func printRandomInt() {
let randomInt = Int.random(in: 1...10)
print("Random integer: \(randomInt)")
}
Давайте запустим компилятор и посмотрим на результат:
Консоль осталась пустой, а все потому что мы данную функцию ни как не вызвали, она у нас есть как опция, но мы ее не используем. Это можно сравнить с педалями в автомобиле, они там есть, но пока вы на них не нажмете никакого результата не получите, машина так и будет стоять. Тут все по тому же принципу, функцию нужно запустить:
printRandomInt()
Теперь, если мы запустим компилятор то увидим наше рандомное значение:
Давайте проследим каждый сделанный компилятором шаг: