Sobes.tech
Junior — Middle

Como é que o mecanismo de extensão de funções é implementado ao nível da arquitetura interna do Kotlin?

sobes.tech IA

Resposta da IA

No Kotlin, o mecanismo de extensão de funções é implementado ao nível do compilador, não ao nível da JVM. Durante a compilação, a função estendida é convertida numa método estático que aceita como primeiro parâmetro o objeto para o qual a extensão é chamada. Isto significa que as extensões não alteram a classe original nem adicionam métodos ao bytecode da classe, mas apenas criam funções externas com uma sintaxe de chamada através de ponto.

Por exemplo, uma extensão para a classe String:

fun String.lastChar(): Char = this.get(this.length - 1)

val c = "Kotlin".lastChar()  // chamada à extensão

O compilador irá gerar um método estático, aproximadamente assim:

public static char lastChar(String receiver) {
    return receiver.charAt(receiver.length() - 1);
}

Assim, as extensões são açúcar sintático que não altera a estrutura das classes, mas adiciona uma forma conveniente de chamar funções externas.