Sobes.tech
Junior

Como são descritas as funções em Kotlin?

sobes.tech IA

Resposta da IA

As funções são declaradas usando a palavra-chave fun, seguida do nome da função, a lista de parâmetros entre parênteses (opcional), dois pontos e o tipo de retorno (opcional). O corpo da função está entre chaves. Se o tipo de retorno for omitido, a função retorna Unit (equivalente a void em outras linguagens).

// Função sem parâmetros e sem valor de retorno
fun greet() {
    println("Hello!")
}

// Função com parâmetros
fun add(x: Int, y: Int): Int {
    return x + y
}

// Função com uma única expressão (sintaxe de corpo abreviado)
fun multiply(a: Int, b: Int) = a * b

Os parâmetros da função são declarados no formato nomeParametro: Tipo. É possível especificar valores padrão para os parâmetros.

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

As funções podem ser declaradas ao nível superior do arquivo ou como membros de classes, objetos ou interfaces.

  • Funções de nível superior: Declaradas fora de classes.

    fun calculateArea(radius: Double): Double {
        return Math.PI * radius * radius
    }
    
  • Funções membro: Declaradas dentro de classes.

    class MyClass {
        fun doSomething() {
            println("Doing something.")
        }
    }
    
  • Funções de extensão: Permitem "adicionar" funções a classes existentes sem modificar seu código fonte.

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

Expressões lambda e funções anônimas representam literais funcionais que podem ser passados como argumentos ou atribuídos a variáveis.

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

Funções de ordem superior aceitam funções como parâmetros ou retornam funções.

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

Sobrecarga de funções (diferentes funções com o mesmo nome, mas assinaturas diferentes) é suportada automaticamente.

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

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