devterview_$ iniciar simulação

Extension functions: o que são e o que NÃO são

DifícilSêniorRecursos da linguagem

Pergunta

O que é uma extension function no Kotlin, e por que ela não é 'adicionar um método de verdade' à classe?

Resposta esperada

`fun String.encurtar(n: Int): String = ...` deixa você chamar `texto.encurtar(10)` como se `String` tivesse esse método, sem herdar nem editar a classe. Útil pra: adicionar utilitários a tipos de bibliotecas/SDK, escrever DSLs, e organizar código sem uma classe `StringUtils` estática. Mas por baixo é AÇÚCAR pra uma função estática que recebe o receptor como primeiro parâmetro — o que implica: (1) resolução ESTÁTICA, pelo tipo declarado, não polimórfica — se você tem `open class A`, `class B : A`, uma extension `A.f()` e `B.f()`, chamar por uma referência do tipo `A` sempre roda `A.f()` mesmo que o objeto seja `B`; (2) não acessa membros privados da classe; (3) se a classe ganhar um MÉTODO real com a mesma assinatura, o método real ganha e sua extension fica silenciosamente 'coberta'. Ou seja: conveniência sintática, não extensão de OO.

Por que perguntam isso

Pergunta pleno/sênior de Kotlin. O ponto que separa: 'resolução estática, não polimórfica' — pega quem acha que é override de verdade.

#extension-functions#resolucao-estatica
publicidade

Relacionadas