Разделы презентаций


Функции

Содержание

ПЛАН ЛЕКЦИИ 1. Объявление функций Входные параметры и возвращаемое значение Тело функции как значение Вложенные функции Перезагрузка функций Рекурсивный вызов функций М И Н И С Т Е Р С

Слайды и текст этой презентации

Слайд 1 Функции
Мустафина Б.М.
(ФИО преподавателя)

mustafa_bm@mail.ru
(Электронная почта преподавателя )

М И Н И С

Т Е Р С Т В О О

Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

Компьютерная и программная инженерия (кафедра) Мобильное программирование iOS Apple (дисциплина)

Лекция № 5
2 академических часа

Функции Мустафина Б.М.(ФИО преподавателя)mustafa_bm@mail.ru(Электронная почта преподавателя )М И Н И С Т Е Р С Т

Слайд 2ПЛАН ЛЕКЦИИ 1. Объявление функций
Входные параметры и возвращаемое значение
Тело

функции как значение
Вложенные функции
Перезагрузка функций
Рекурсивный вызов функций





М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

ПЛАН ЛЕКЦИИ  1. Объявление функций Входные параметры и возвращаемое значение Тело функции как значение Вложенные функции

Слайд 31. Объявление функций
Функция — это именованный фрагмент программного кода,

к которому можно многократно обращаться.

СИНТАКСИС
func имяФункции

(входные_параметры) ->
ТипВозвращаемогоЗначения {
тело_функции
}

Имя функции используется при каждом ее вызове в вашем коде:
func myFirstFunc



М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

1. Объявление функций 	Функция — это именованный фрагмент программного кода, к которому можно многократно обращаться. СИНТАКСИС

Слайд 41. Объявление функций
func myFirstFunc
(someValue: Int, anotherValue: String)

-> String
или
func myFirstFunc
(someValue: Int, anotherValue: String) -> [(String,Int)?]




М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

1. Объявление функций func myFirstFunc (someValue: Int, anotherValue: String)  -> String 				илиfunc myFirstFunc (someValue: Int, anotherValue:

Слайд 51. Объявление функций
Если функция возвращает какое-либо значение, то в

ее теле должен присутствовать оператор return, за которым следует возвращаемое

значение.

func myFirstFunc (someValue: Int,
anotherValue: String) -> String {
return String(someValue) + anotherValue }


М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

1. Объявление функций 	Если функция возвращает какое-либо значение, то в ее теле должен присутствовать оператор return, за

Слайд 61. Объявление функций
Объявим простейшую функцию, которая не имеет входных

и выходных значений, которая при наступлении некоторого события выводить на

консоль сообщение.

Листинг 11.1
func printMessage() -> Void {
print("Сообщение принято")
} // вызываем функцию по ее имени
printMessage()

Консоль: Сообщение принято

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

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

Слайд 71. Объявление функций
Существует альтернативная ключевому слову Void форма записи

— пустые скобки, которые также сообщают о том, что функция

не возвращает значение. Например:

func printMessage() -> () {
print("Сообщение принято")
}

Кроме того, если функция не возвращает никакого значения, написание какой бы то ни было конструкции можно вовсе опустить. Например:

func printMessage() {
print("Сообщение принято")
}


М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

1. Объявление функций 	Существует альтернативная ключевому слову Void форма записи — пустые скобки, которые также сообщают о

Слайд 82. Входные параметры и возвращаемое значение
2.1. Простые входные и

выходные параметры
2.2. Переменные копии параметров
2.3. Сквозные параметры
2.4. Функция

в качестве значения аргумента
2.5. Входной параметр с переменным числом аргументов
2.6. Кортеж в качестве возвращаемого значения
2.7. Значения по умолчанию для аргументов
2.8. Внешние имена аргументов
2.9. Функция в качестве аргумента
2.10. Функция в качестве возвращаемого значения


М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.1. Простые входные и выходные параметры2.2. Переменные копии параметров 2.3. Сквозные

Слайд 92. Входные параметры и возвращаемое значение
Функция может принимать некоторые

аргументы в качестве входных значений и возвращать некоторый результат своей

работы. При этом вывод информации на консоль не является возвращаемым значением.

2.1. Простые входные и выходные параметры

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

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 	Функция может принимать некоторые аргументы в качестве входных значений и возвращать

Слайд 102. Входные параметры и возвращаемое значение
2.1. Простые входные и

выходные параметры

Листинг 11.2

func printCodeMessage(requestCode: Int) -> () {
print("Код

ответа - \(requestCode)") }
// вызываем функцию
printCodeMessage(200)
printCodeMessage(404)

Консоль: Код ответа – 200
Код ответа – 404

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.1. Простые входные и выходные параметрыЛистинг 11.2 func printCodeMessage(requestCode: Int) ->

Слайд 112. Входные параметры и возвращаемое значение
2.1. Простые входные и

выходные параметры

В листинге 11.3 реализована функция, которая принимает на входе

три значения, складывает их и выводит результат на консоль.

Листинг 11.3

func sum(a:Int, b: Int, c:Int) -> () {
print("Сумма - \(a+b+c)»)
}
sum(10, b: 51, c: 92)

Консоль: Сумма - 153

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.1. Простые входные и выходные параметры	В листинге 11.3 реализована функция, которая

Слайд 122. Входные параметры и возвращаемое значение
2.1. Простые входные и

выходные параметры

Существует способ сообщить Swift, что для данной функции нет

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

Листинг 11.4
func sum(a:Int, _ b: Int, c:Int) -> () {
print("Сумма - \(a+b+c)") } sum(15, 12, c: 9)

Консоль: Сумма - 36

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.1. Простые входные и выходные параметры	Существует способ сообщить Swift, что для

Слайд 132. Входные параметры и возвращаемое значение
2.2. Переменные копии параметров



Все входные параметры функции — константы. При попытке изменения их

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









М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.2. Переменные копии параметров 	Все входные параметры функции — константы. При

Слайд 142. Входные параметры и возвращаемое значение
2.3. Сквозные параметры

Переменные

копии параметров могут существовать только в теле функции, и их

значения исчезают, как только функция завершает свою работу. Для того чтобы входные аргументы сохранили свои значения даже после завершения вызова функции, необходимо использовать сквозные параметры.
Чтобы преобразовать входной параметр в сквозной, перед его описанием необходимо указать модификатор inout. Сквозной параметр передается в функцию, изменяется в ней и возвращается из функции, заменяя собой исходное значение входного аргумента. При вызове функции перед передаваемым значением аргумента необходимо ставить символ амперсанда (&), указывающий на то, что параметр передается по ссылке.


М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.3. Сквозные параметры 	Переменные копии параметров могут существовать только в теле

Слайд 152. Входные параметры и возвращаемое значение
2.3. Сквозные параметры

Листинг

11.6

func changeValues(inout a: Int,
inout _ b: Int) ->

() {
let tmp = a a = b b = tmp
} var a = 150, b = 45 changeValues(&a, &b) a //45
b //150

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.3. Сквозные параметры Листинг 11.6 func changeValues(inout a: Int, 			inout _

Слайд 162. Входные параметры и возвращаемое значение
2.4. Функция в качестве

значения аргумента

Можно использовать возвращаемое функцией значение в качестве значения

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

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.4. Функция в качестве значения аргумента 	Можно использовать возвращаемое функцией значение

Слайд 172. Входные параметры и возвращаемое значение
2.4. Функция в качестве

значения аргумента

Листинг 11.7

func generateString(code: Int, message: String) ->

String {
let returnMessage =
"Получено сообщение \(message)с кодом \(code)"
return returnMessage
}
// используем функцию в качестве значения print(generateString(200, message:"Сервер
доступен"))

Консоль:
Получено сообщение "Сервер доступен" с кодом 200

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.4. Функция в качестве значения аргумента Листинг 11.7 func generateString(code: Int,

Слайд 182. Входные параметры и возвращаемое значение
2.4. Функция в качестве

значения аргумента

Функция generateString() возвращает значение типа String. В связи

с этим в конце функции используется ключевое слово return с указанием возвращаемого параметра.

Уже известная нам функция print() принимает на входе строковый литерал типа String, который выводится на консоль. Так как первая функция возвращает значение того же типа, что принимает на входе вторая, то можно указать в качестве входного аргумента функции print() имя первой функции.

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.4. Функция в качестве значения аргумента 	Функция generateString() возвращает значение типа

Слайд 192. Входные параметры и возвращаемое значение
2.5. Входной параметр с

переменным числом аргументов

В некоторых ситуациях необходимо, чтобы функция получала

неизвестное заранее число однотипных аргументов. Для этого вы можете либо принимать массив значений, либо создать вариативный параметр, то есть параметр с переменным числом аргументов.
Вариативный параметр обозначается в списке входящих параметров указанием оператора закрытого диапазона (...) сразу после типа входного параметра. Значения для этого параметра при вызове функции задаются через запятую.
Рассмотрим пример. Представьте, что удаленный сервер на каждый запрос отправляет вам несколько ответов. Каждый ответ — это целое число, но количество ответов заранее неизвестно. Необходимо написать функцию, которая принимает на входе все полученные ответы и выводит их на консоль.

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.5. Входной параметр с переменным числом аргументов 	В некоторых ситуациях необходимо,

Слайд 202. Входные параметры и возвращаемое значение
2.5. Входной параметр с

переменным числом аргументов














М И Н И С Т Е

Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА
2. Входные параметры и возвращаемое значение 2.5. Входной параметр с переменным числом аргументов 	М И Н И

Слайд 212. Входные параметры и возвращаемое значение
2.6. Кортеж в качестве

возвращаемого значения

Представленная в листинге 11.9 функция принимает на входе

код статуса ответа сервера и в зависимости от того, к какому диапазону относится переданный код, возвращает кортеж с его описанием.

Функцию getCodeDescription() можно улучшить, если указать не просто тип возвращаемого кортежа, а названия его элементов (листинг 11.10).



М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.6. Кортеж в качестве возвращаемого значения 	Представленная в листинге 11.9 функция

Слайд 222. Входные параметры и возвращаемое значение
2.6. Кортеж в качестве

возвращаемого значения













М И Н И С Т Е Р

С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА
2. Входные параметры и возвращаемое значение 2.6. Кортеж в качестве возвращаемого значения 	М И Н И С

Слайд 23Листинг 11.10
func getCodeDescription(code: Int)
-> (code: Int,

description: String){
let description: String
switch code {
case 1...100:


description = "Error"
case 101...200:
description = "Correct"
default:
description = "Unknown"
}
return (code, description)
}
let request = getCodeDescription(48)
request.description
request.code

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

Листинг 11.10 func getCodeDescription(code: Int)  -> (code: Int, description: String){ 	let description: String 	switch code {

Слайд 242. Входные параметры и возвращаемое значение
2.6. Кортеж в качестве

возвращаемого значения

Полученное в ходе работы функции getCodeDescription() значение записывается в

константу request, у которой появляются свойства description и code, что соответствует именам элементов возвращаемого кортежа.
Рассмотрим реальный пример, для которого может потребоваться написание функции. Предположим, что у вас есть виртуальный кошелек. В любой момент времени в нем находятся купюры различного достоинства: от 50 до 5000 рублей. Вам необходимо написать функцию, которая будет подсчитывать общее количество денег в кошельке


М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.6. Кортеж в качестве возвращаемого значения	Полученное в ходе работы функции getCodeDescription()

Слайд 25














М И Н И С Т Е Р С

Т В О О Б Р А З

О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА
М И Н И С Т Е Р С Т В О   О Б

Слайд 262. Входные параметры и возвращаемое значение
2.7. Значения по умолчанию

для аргументов


Для любого входного параметра можно указать значение по

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


М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.7. Значения по умолчанию для аргументов 	Для любого входного параметра можно

Слайд 27

М И Н И С Т Е Р С

Т В О О Б Р А З

О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА
М И Н И С Т Е Р С Т В О   О Б

Слайд 282. Входные параметры и возвращаемое значение
2.7. Значения по умолчанию

для аргументов

В рассматриваемой функции появилось сразу несколько нововведений. Разберем

каждое из них по отдельности.
Тип данных входного параметра wallet изменился с [Int] на [Int]?. Это опциональный массив целочисленных значений. Обратите внимание, что знак опционала стоит именно после квадратной скобки массива, что говорит о том, что сам массив может отсутствовать, но если он присутствует, то в нем обязан существовать хотя бы один элемент типа Int.
Также у входного параметра появилось значение по умолчанию — nil. Оно присваивается переменной wallet в том случае, если при вызове функции ей не передано значение этого параметра.
Дополнительно изменился тип возвращаемого значения. В том случае, если входное значение параметра wallet не существует (то есть равно nil), функция возвратит в качестве ответа также nil.
Для корректного определения, существует ли у wallet значение, использован оператор if. В его теле находится оператор return, который завершает работу функции и возвращает nil.

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.7. Значения по умолчанию для аргументов 	В рассматриваемой функции появилось сразу

Слайд 292. Входные параметры и возвращаемое значение
2.8. Внешние имена аргументов



Для любого входного параметра можно задать его внешнее имя, то

есть имя, которое указывается при вызове функции. Оно пишется перед внутренним именем аргумента и отделяется от него пробелом (листинг 11.13).
Входной параметр wallet теперь имеет внешнее имя banknotsArray, поэтому при вызове функции sumWallet() необходимо указать не только значение параметра, но и его внешнее имя.
Внешние имена входных параметров служат для того, чтобы скрывать их внутренние имена.

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.8. Внешние имена аргументов 	Для любого входного параметра можно задать его

Слайд 30

Листинг 11.13

func sumWallet(banknotsArray wallet: [Int]? = nil )

-> Int? {
var sum = 0
if wallet ==

nil {
return nil
} for oneBanknote in wallet! {
sum += oneBanknote
} return sum } // сосчитаем сумму всех купюр sumWallet(banknotsArray: [50, 100, 100, 500, 50, 1000,
5000, 50, 100])
// 6 950

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

Листинг 11.13 func sumWallet(banknotsArray wallet: [Int]? = nil ) -> Int? { 	var sum = 0 	if

Слайд 312. Входные параметры и возвращаемое значение
2.9. Функция в качестве

аргумента

Функция в Swift имеет свой функциональный тип данных.

Тип данных функции обозначается с помощью конструкции, указывающей на тип входных и выходных значений.
Если функция ничего не принимает и не возвращает, то ее тип указывается так:
() -> ()
Если функция принимает на входе массив целочисленных значений, а возвращает опциональный кортеж из двух строковых элементов, то ее тип данных выглядит следующим образом:
([Int]) -> (String,String)?
В левой части данной конструкции указываются типы входных параметров, в правой — типы выходных значений


М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.9. Функция в качестве аргумента 	 Функция в Swift имеет свой

Слайд 322. Входные параметры и возвращаемое значение
2.9. Функция в качестве

аргумента
Использование входных параметров не заканчивается на передаче им

значений фундаментальных типов, массивов и кортежей. Теперь мы научимся передавать не значение, которое возвращает функция, а непосредственно саму функцию. Переданную функцию можно будет использовать в теле той функции, в которую происходит передача.
Для передачи функции в качестве значения необходимо указать функциональный тип принимаемой функции в качестве типа принимающего аргумента.
Напишем новую функцию generateWallet(), которая случайным образом генерирует массив банкнот. Она должна принимать на входе требуемое количество банкнот в кошельке. Также мы перепишем функцию sumWallet() таким образом, чтобы она принимала на входе не массив значений, а функцию generateWallet(), и самостоятельно генерировала массив случайных банкнот (листинг 11.14).


М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.9. Функция в качестве аргумента 	 Использование входных параметров не заканчивается

Слайд 33Листинг 11.14
1  import Foundation
2  // функция генерации случайного

массива банкнот
3  func generateWallet(walletLength: Int)
4  -> [Int] {


5   // существующие типы банкнот
6   let typesOfBanknotes = [50, 100, 500, 1000, 5000]
7   // массив банкнот
8   var wallet: [Int] = []
9   // цикл генерации массива случайных банкнот
10   for _ in 1...walletLength {
11   let randomIndex = Int( arc4random_uniform(
UInt32( typesOfBanknotes.count-1 ) ) )
12  wallet.append( typesOfBanknotes[randomIndex] )
13  }
14  return wallet
15  }
16  // функция подсчета денег в кошельке


М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

Листинг 11.14 1  import Foundation 2  // функция генерации случайного массива банкнот 3  func generateWallet(walletLength: Int) 4

Слайд 34Листинг 11.14

17  func sumWallet(banknotsFunction wallet: (Int)->([Int]) )
18   ->

Int? {
19   // вызов переданной функции
20   let myWalletArray

= wallet( Int( arc4random_uniform(10) ) )
21  var sum: Int = 0
22   for oneBanknote in myWalletArray {
23   sum += oneBanknote
24   }
25   return sum
26  }
27  // передача функции в функцию
28  sumWallet(banknotsFunction: generateWallet)

// 2 700


М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

Листинг 11.14 17  func sumWallet(banknotsFunction wallet: (Int)->([Int]) ) 18  	-> Int? { 19  	// вызов переданной функции

Слайд 352. Входные параметры и возвращаемое значение
2.9. Функция в качестве

аргумента
Функция generateWallet() создает массив купюр такой длины, которая

передана ей в качестве входного параметра. В массиве typesOfBanknotes содержатся все возможные типы купюр. Суть работы функции такова: случайным образом купюра изымается из массива typesOfBanknotes, после чего она помещается в массив-кошелек wallet, который и является возвращаемым значением данной функции.
В цикле for вместо переменной используется символ нижнего подчеркивания. С этим замечательным заменителем переменных мы уже встречались не раз. В данном случае он заменяет собой создаваемый в цикле параметр, так как внутри цикла он не используется. В результате под этот параметр не выделяется память, что благоприятно влияет на работу.
В качестве типа входного параметра wallet функции sumWallet() указан тип функции generateWallet(). При вызове sumWallet() необходимо передать лишь имя требуемой функции.



М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.9. Функция в качестве аргумента 	 Функция generateWallet() создает массив купюр

Слайд 362. Входные параметры и возвращаемое значение
2.10 Функция в качестве

возвращаемого значения
















М И Н И С Т Е Р

С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА
2. Входные параметры и возвращаемое значение 2.10 Функция в качестве возвращаемого значения 	М И Н И С

Слайд 372. Входные параметры и возвращаемое значение
2.10 Функция в качестве

возвращаемого значения


В качестве типа возвращаемого функцией returnPrintTextFunction() значения указан

тип () -> (String). Он соответствует типу данных функции printText().
В результате присвоения возвращенной функции константе newFunctionInLet ее тип данных становится () -> (String), а сама она хранит в себе функцию, которую можно вызывать. В этом можно убедиться, если вывести справочное окно для этой константы (рис. 11.1).



М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

2. Входные параметры и возвращаемое значение 2.10 Функция в качестве возвращаемого значения 		В качестве типа возвращаемого функцией

Слайд 38Вопросы для самоподготовки: 1. 2. 3.
М И Н И С

Т Е Р С Т В О О

Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА
Вопросы для самоподготовки:  1.  2.  3.  М И Н И С Т Е

Слайд 39Литература и ссылки на интернет ресурсы:
1. Марк Д., Наттинг Д.,

Топли К., Олссон Ф., Ламарш Д. Swift: разработка приложений в

среде Xcode для iPhone и iPad с использованием iOS SDK. : Пер. С англ. – М.: ООО “И.Д. Вильямс”, 2015. – 816 с.
The Swift programming language. - Электронная версия книги на сайте developer.apple.com
Using Swift with Cocoa and Objective C - Электрон-ная версия книги на сайте developer.apple.com

М И Н И С Т Е Р С Т В О О Б Р А З О В А Н И Я И Н А У К И Р Е С П У Б Л И К И К А З А Х С Т А Н
КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ имени К.И. САТПАЕВА

Литература и ссылки на интернет ресурсы: 1. Марк Д., Наттинг Д., Топли К., Олссон Ф., Ламарш Д.

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика