Функции


Функция представляет набор инструкций, который имеет имя (имя функции) и может использоваться повторно в различных местах программы. Функция имеет следующее формальное определение:

1
2
3
4
func имя_функции (параметры) -> тип_возвращаемого_значения {

// набор инструкций
}
Сначала идет ключевое слово func, после которого идет имя функции. Для именования функции применяются в принципе те же правила, что и при именовании переменных. Для имени функции используется режим camel case.

После имени функции в скобках указываются параметры. Если параметров нет, то просто идут пустые скобки.

Если функция возвращает какое-либо значение, то после параметров в скобках идет стрелка и тип возвращаемого значения. И в конце в фигурных скобках собственно идет блок кода, который и представляет функцию.

Определим простейшую функцию:

1
2
3
4
func printName(){

print("Меня зовут Том")
}
Здесь функция называется printName. Эта функция ничего не возвращает, поэтому тут после скобок сразу идут фигурные скобки с набором операторов. Данная функция просто выводит строку "Меня зовут Том".

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

1
2
3
4
5
6
7
8
func printName(){

print("Меня зовут Том")
}

printName()
printName()
printName()
В частности, здесь функция вызывается три раза.

Параметры функции
Теперь используем параметры:

1
2
3
4
5
6
7
func printInfo(name: String, age: Int){

print("Имя: \(name) ; возраст: \(age)")
}

printInfo(name: "Tom", age: 18) // Имя: Tom ; возраст: 18
printInfo(name: "Bob", age: 35) // Имя: Bob ; возраст: 35
Количество параметров может быть произвольным. В данном случае мы используем два параметра: для передачи имени и возраста. Для каждого параметра определено имя и тип. Например, первый параметр называется name и имеет тип String.

При вызове функции нам надо учитывать имя и тип параметров. При вызове функции ей необходимо передать значения для всех ее параметров по имени. То есть указывается имя параметра и через двоеточие его значение: name: "Tom", причем передаваемое значение должно соответствовать параметру по типу:

1
printInfo(name: "Tom", age: 18)
Хотя мы можем указать, что при вызове функции не надо указывать имена параметров при ее вызове. Для этого перед именем параметра нужно поставить подчеркивание. Между подчеркиванием и названием параметра должен идти пробел:

1
2
3
4
5
6
func printInfo(_ name: String, _ age: Int){

print("Имя: \(name) ; возраст: \(age)")
}

printInfo("Tom", 18) // Имя: Tom ; возраст: 18
При вызове подобной функции значения параметрам передаются по позиции. При этом опять же передаваемое значение должно соответствовать параметру по типу.

Значения параметров по умолчанию
Если мы определили два параметра в функции, то соответственно при ее вызове мы также должны передать ей два значения для параметров. Однако мы также можем установить для параметров значения по умолчанию:

1
2
3
4
5
6
7
8
func printInfo(name: String = "Tom", age: Int = 22){

print("Имя: \(name) ; возраст: \(age)")
}

printInfo(name: "Bob", age: 18) // Имя: Bob ; возраст: 18
printInfo(name: "Alice") // Имя: Alice ; возраст: 22
printInfo() // Имя: Tom ; возраст: 22
И если при вызове функции мы не передадим для какого-то параметра значение, то этот параметр будет использовать значение по умолчанию.