Menu
Coddy logo textTech

Передача функций

Часть раздела Логика и управление потоком путешествия по Kotlin на Coddy. Урок 28 из 63.

Функция высшего порядка принимает значение функции или возвращает его. Объявите параметр функции с типом функции, затем вызовите её внутри вспомогательной функции. Если последний аргумент — лямбда-выражение, Kotlin позволяет разместить его фигурные скобки после скобок вызова.

fun applyTwice(n: Int, operation: (Int) -> Int): Int {
    return operation(operation(n))
}

Внутри main:

println(applyTwice(2) { it + 3 })

Первый вызов изменяет два на пять; второй изменяет пять на восемь.

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

challenge icon

Задание

Средне

Дополните twiceDouble параметром value: Int. Используйте предоставленный вспомогательный код applyTwice и лямбда-выражение для удвоения. Верните результат после двукратного применения операции удвоения.

Если выше не указаны более строгие ограничения, коллекции содержат не более 100 элементов на каждом уровне, а целочисленные аргументы и целочисленные значения коллекций находятся в диапазоне от -1000 до 1000. Текст, предоставленный для разбора, может содержать недопустимые представления или представления, выходящие за допустимый диапазон, как описано.

Верните значение типа Int. Сохраните предоставленный код ввода/вывода. Он считывает скалярные аргументы по одному в строке; список начинается с его количества элементов, за которым следуют эти элементы, а отображение начинается с количества записей, за которым следуют каждый ключ и значение. Вложенные списки повторяют формат «количество и элементы» для каждой строки. Предоставленный main выводит возвращаемое значение, за которым следует один символ новой строки. Списки используют стандартный формат Kotlin со скобками; не выводите дополнительные метки.

Попробуйте сами

fun applyTwice(n: Int, operation: (Int) -> Int): Int {
    return operation(operation(n))
}
fun twiceDouble(value: Int): Int {
    // Напишите ваше решение здесь.
    return 0
}
fun main() {
    val value = readln().toInt()
    println(twiceDouble(value))
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Песочница Kotlin