0Pricing
Kotlin Academy · Aula

Passando lambdas para funções

Passe lambdas como argumentos e use a sintaxe de lambda à direita.

Passando lambdas para funções é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.

Funções que aceitam lambdas

Uma função de ordem superior é aquela que recebe uma função, como uma lambda, como parâmetro. É assim que funcionam as operações de mapeamento, filtragem e forEach.

Declarando uma função de ordem superior

Use um tipo de função como tipo do parâmetro.
fun applyTwice(n: Int, op: (Int) -> Int): Int {
    return op(op(n))
}
println(applyTwice(3, { it * 2 }))  // 12

Sintaxe de lambda final

Se o último parâmetro for uma função, você poderá mover a lambda para fora dos parênteses. Essa é a sintaxe de lambda final.
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))

// Standard:
applyTwice(3, { it * 2 })
// Trailing lambda:
applyTwice(3) { it * 2 }

Lambda final sem parênteses

Quando a lambda é o argumento ONLY, você pode omitir os parênteses completamente.
fun execute(block: () -> Unit) = block()

// With parens:
execute({ println("Hello") })
// Without parens (idiomatic):
execute { println("Hello") }

Passando uma variável lambda

Você pode passar uma referência de lambda armazenada usando o nome da variável.
val double = { n: Int -> n * 2 }
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(5, double))  // 20

Referências de função com ::

Use :: para passar uma função nomeada como argumento compatível com lambda.
fun triple(n: Int) = n * 3
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(2, ::triple))  // 18

Vários parâmetros lambda

Uma função pode aceitar vários parâmetros lambda. Somente o último pode usar a sintaxe de lambda no final.
fun transform(
    value: Int,
    before: (Int) -> Int,
    after: (Int) -> Int
) = after(before(value))

println(transform(5, { it * 2 }, { it + 1 }))  // 11

Passando uma lambda para a filtragem

A operação de filtragem aceita uma lambda predicado — uma função que transforma um elemento em Booleano.
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evens = numbers.filter { it % 2 == 0 }
println(evens)  // [2, 4, 6]

Encadeando funções de ordem superior

Encadeie chamadas de várias funções de ordem superior para criar fluxos de dados expressivos.
val result = (1..10)
    .filter { it % 2 != 0 }  // odds
    .map { it * it }          // square
    .take(3)                  // first 3
println(result)  // [1, 9, 25]

Captura de variáveis por lambdas

As lambdas podem capturar variáveis do escopo ao redor (fechamento). No Kotlin, elas podem até capturar e modificar variáveis mutáveis.
var total = 0
listOf(1, 2, 3, 4).forEach { total += it }
println(total)  // 10

Retornando uma lambda de uma função

Funções de ordem superior também podem retornar lambdas, criando funções fábrica.
fun multiplierOf(factor: Int): (Int) -> Int {
    return { n -> n * factor }
}
val double = multiplierOf(2)
val triple = multiplierOf(3)
println(double(5))  // 10
println(triple(5))  // 15

Verificação rápida

Quando você pode mover uma lambda para fora dos parênteses usando a sintaxe de lambda no final?

Recapitulação

Funções de ordem superior recebem lambdas como parâmetros. A sintaxe de lambda no final move a lambda para fora dos parênteses quando ela é a última. :: transmite referências a funções nomeadas. A seguir: o parâmetro implícito 'it'!

Perguntas Frequentes

A aula “Passando lambdas para funções” é grátis?

Sim — o texto completo de “Passando lambdas para funções” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.

O que vou aprender em “Passando lambdas para funções”?

Passe lambdas como argumentos e use a sintaxe de lambda à direita. Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Kotlin Academy?

Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Passando lambdas para funções”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Kotlin Academy?

Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. O que é uma lambda? Sintaxe e tipos
  2. Passando lambdas para funções
  3. it: o parâmetro implícito
  4. filter, map e find em coleções
← Voltar para Kotlin Academy