0Pricing
Kotlin Academy · Aula

Funções inline: eliminando a sobrecarga de lambdas

Marque funções como inline para evitar a criação de objetos para parâmetros lambda.

Funções inline: eliminando a sobrecarga de lambdas é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 1 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.

O que é uma função inline

Normalmente, uma lambda passada para uma função é compilada em uma classe anônima. Cada chamada aloca um novo objeto, o que custa memória e tempo. A palavra-chave inline instrui o compilador a copiar o corpo da função (e seus argumentos lambda) diretamente para o local da chamada.

Declarando inline

Adicione o modificador inline antes de fun:

inline fun measureTime(block: () -> Unit): Long {
    val start = System.nanoTime()
    block()
    return System.nanoTime() - start
}

Como o compilador reescreve a chamada

Uma chamada como measureTime { doWork() } se transforma, no nível do código de bytes, no corpo de measureTime colado no local da chamada — nenhum objeto lambda é alocado.

Quando usar inline

Use inline quando:

  • A função recebe um ou mais parâmetros lambda
  • Ela é chamada com frequência em caminhos críticos (laços fechados e funções componíveis)
  • Você precisa de parâmetros de tipo reified (abordados a seguir)

Exemplo de avaliação de desempenho

Sem inline, cada chamada de uma função de ordem superior aloca um objeto lambda. Com ele, a JVM vê código sequencial — sem alocação e sem despacho virtual.

inline fun repeat(n: Int, block: () -> Unit) {
    for (i in 0 until n) block()
}

Retornos não locais

Um benefício importante das funções inline: a lambda pode usar return para sair da função envolvente, e não apenas da lambda. Isso é chamado de retorno não local.

inline fun forEach(list: List<Int>, block: (Int) -> Unit) {
    for (item in list) block(item)
}

fun findFirst(list: List<Int>): Int {
    forEach(list) { if (it > 5) return it }  // returns from findFirst
    return -1
}

Limitações de inline

Funções inline não podem ser armazenadas em variáveis nem passadas como objetos, pois não existem como entidades de primeira classe durante a execução. Não é possível chamar f(::measureTime) quando f espera uma referência de função com essa assinatura.

Inserção em linha de cadeias de coleções

As funções da biblioteca padrão map, filter, forEach etc. são todas inline. Por isso, encadeá-las não cria objetos de fechamento adicionais para cada elemento.

val result = (1..1_000_000)
    .filter { it % 2 == 0 }   // inline
    .map { it * it }           // inline
    .take(10)

Compromisso com o tamanho do código

Cada local de chamada recebe uma cópia do código inserido. Se o corpo da função for grande e for chamado de muitos lugares, o tamanho do código de bytes aumentará. Prefira inline para lambdas pequenas chamadas com frequência.

Interação com companion e funções de nível superior

inline funciona em funções de nível superior e funções-membro. Ele não funciona em propriedades nem em construtores. A função precisa estar visível no local da chamada (geralmente ser public ou internal).

Exemplos da biblioteca padrão

Funções que você já conhece e que são inline: let, run, apply, also, with, use, synchronized, lazy (variante com bloco). O modificador inline é o que torna suas lambdas livres de custo.

Verificação rápida

Qual é o principal benefício de marcar uma função de ordem superior como inline?

Recapitulação: funções inline

Principais conclusões:

  • inline elimina a alocação de objetos lambda
  • Permite retornos não locais a partir de lambdas
  • É necessário para parâmetros de tipo reified
  • É melhor para funções de ordem superior pequenas e chamadas com frequência
  • As funções de escopo da biblioteca padrão são todas inline

Perguntas Frequentes

A aula “Funções inline: eliminando a sobrecarga de lambdas” é grátis?

Sim — o texto completo de “Funções inline: eliminando a sobrecarga de lambdas” é 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 “Funções inline: eliminando a sobrecarga de lambdas”?

Marque funções como inline para evitar a criação de objetos para parâmetros lambda. 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 1 de 4.

Quanto tempo leva a aula “Funções inline: eliminando a sobrecarga de lambdas”?

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. Funções inline: eliminando a sobrecarga de lambdas
  2. Modificadores noinline e crossinline
  3. Parâmetros de tipo reified: acessando T em tempo de execução
  4. Padrões práticos com reified: análise, DI e serialização
← Voltar para Kotlin Academy