Назад к вопросам
Junior
107
questionbank

Как в Kotlin осуществляется описание функций?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Функции объявляются с использованием ключевого слова fun, за которым следует имя функции, список параметров в круглых скобках (опционально), двоеточие и возвращаемый тип (опционально). Тело функции заключается в фигурные скобки. Если возвращаемый тип опущен, функция возвращает Unit (эквивалент void в других языках).

// Функция без параметров и возвращаемого значения
fun greet() {
    println("Hello!")
}

// Функция с параметрами
fun add(x: Int, y: Int): Int {
    return x + y
}

// Функция с одним выражением (синтаксис сокращенного тела)
fun multiply(a: Int, b: Int) = a * b

Параметры функции объявляются в формате имяПараметра: Тип. Можно указывать значения параметров по умолчанию.

fun sendMessage(message: String, sender: String = "Unknown") {
    println("$sender: $message")
}

Функции могут объявляться на верхнем уровне файла или быть членами классов, объектов или интерфейсов.

  • Top-level functions: Объявляются вне классов.

    fun calculateArea(radius: Double): Double {
        return Math.PI * radius * radius
    }
    
  • Member functions: Объявляются внутри классов.

    class MyClass {
        fun doSomething() {
            println("Doing something.")
        }
    }
    
  • Extension functions: Позволяют "добавить" функции существующим классам без изменения их исходного кода.

    fun String.reverseAndUpperCase(): String {
        return this.reversed().toUpperCase()
    }
    

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

val sum: (Int, Int) -> Int = { x, y -> x + y }
val greeting = { name: String -> "Hello, $name!" }

Функции высшего порядка принимают функции в качестве параметров или возвращают функции.

fun operate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)
}

val result = operate(5, 3, { x, y -> x * y }) // result = 15

Перегрузка функций (разные функции с одинаковым именем, но разными сигнатурами) поддерживается автоматически.

fun printInfo(name: String) {
    println("Name: $name")
}

fun printInfo(age: Int) {
    println("Age: $age")
}