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.