Kotlin - Extensión
En este capítulo, aprenderemos sobre otra característica nueva de Kotlin llamada "Extensión". Usando la extensión, podremos agregar o eliminar algunas funciones del método incluso sin heredarlas o modificarlas. Las extensiones se resuelven estadísticamente. En realidad, no modifica la clase existente, pero crea una función invocable que se puede llamar con una operación de punto.
Extensión de función
En la extensión de funciones, Kotlin permite definir un método fuera de la clase principal. En el siguiente ejemplo, veremos cómo se implementa la extensión a nivel funcional.
class Alien {
var skills : String = "null"
fun printMySkills() {
print(skills)
}
}
fun main(args: Array<String>) {
var a1 = Alien()
a1.skills = "JAVA"
//a1.printMySkills()
var a2 = Alien()
a2.skills = "SQL"
//a2.printMySkills()
var a3 = Alien()
a3.skills = a1.addMySkills(a2)
a3.printMySkills()
}
fun Alien.addMySkills(a:Alien):String{
var a4 = Alien()
a4.skills = this.skills + " " +a.skills
return a4.skills
}
En el ejemplo anterior, no tenemos ningún método dentro de la clase "Alien" llamado "addMySkills ()", sin embargo, todavía estamos implementando el mismo método en algún otro lugar fuera de la clase. Esta es la magia de la extensión.
El fragmento de código anterior generará la siguiente salida en el navegador.
JAVA SQL
Extensión de objeto
Kotlin proporciona otro mecanismo para implementar la funcionalidad estática de Java. Esto se puede lograr utilizando la palabra clave "objeto complementario". Usando este mecanismo, podemos crear un objeto de una clase dentro de un método de fábrica y luego podemos simplemente llamar a ese método usando la referencia del nombre de la clase. En el siguiente ejemplo, crearemos un "objeto complementario".
fun main(args: Array<String>) {
println("Heyyy!!!"+A.show())
}
class A {
companion object {
fun show():String {
return("You are learning Kotlin from TutorialsPoint.com")
}
}
}
El fragmento de código anterior producirá el siguiente resultado en el navegador.
Heyyy!!! You are learning Kotlin from TutorialsPoint.com
El ejemplo anterior parece estático en Java, sin embargo, en tiempo real estamos creando un objeto como una variable miembro de esa misma clase. Esta es la razón por la que también se incluye en la propiedad de extensión y se puede llamar alternativamente como una extensión de objeto. Básicamente, está ampliando el objeto de la misma clase para usar algunas de las funciones miembro.