O que são extensões na linguagem de programação Kotlin?
sobes.tech IA
Resposta da IA
As extensões em Kotlin permitem adicionar novas funções ou propriedades a classes existentes sem herdar delas ou usar decoradores.
Conceitos principais:
-
Funções de extensão: Adicionam novos métodos às classes.
// Definição de uma função de extensão fun String.removeWhitespaces(): String { return this.filter { it.isWhitespace().not() } } // Uso da função de extensão val myString = " Hello World " val cleanedString = myString.removeWhitespaces() // cleanedString será "HelloWorld"A palavra-chave
thisdentro da função de extensão refere-se ao objeto ao qual a extensão é chamada (no exemplo, amyString). -
Propriedades de extensão: Permitem adicionar novas propriedades às classes, mas não podem ter estado, ou seja, não podem armazenar dados. São calculadas a cada acesso.
// Definição de uma propriedade de extensão val <T> List<T>.lastIndex: Int get() = size - 1 // Uso da propriedade de extensão val myList = listOf(1, 2, 3) val indexLast = myList.lastIndex // indexLast será 2Propriedades de extensão devem ter um getter. O setter é opcional.
Características:
-
Despacho estático: A chamada de uma extensão é determinada pelo tipo da variável, não pelo tipo do objeto em tempo de execução. Isso difere dos métodos virtuais em programação orientada a objetos.
open class Parent class Child : Parent() fun Parent.printType() = println("Parent") fun Child.printType() = println("Child") val p: Parent = Child() p.printType() // Imprimirá "Parent", pois o tipo da variável 'p' é Parent -
Membros privados e protected: As extensões não podem acessar membros privados ou protected da classe que estendem.
-
Extensões em objetos companion: É possível estender objetos companheiros de uma classe.
class MyClass { companion object { fun create() = MyClass() } } fun MyClass.Companion.printName() = println("MyClass Companion") MyClass.printName() // Imprimirá "MyClass Companion" -
Visibilidade: As extensões devem ser declaradas em um arquivo e depois importadas para uso em outros arquivos.
As extensões são uma ferramenta poderosa para criar código legível e flexível, permitindo adicionar funcionalidades às classes de bibliotecas externas sem alterar seu código-fonte.