Kotlin - Estensione

In questo capitolo apprenderemo un'altra nuova funzionalità di Kotlin chiamata "Extension". Utilizzando l'estensione, saremo in grado di aggiungere o rimuovere alcune funzionalità del metodo anche senza ereditarle o modificarle. Le estensioni vengono risolte statisticamente. Non modifica effettivamente la classe esistente, ma crea una funzione richiamabile che può essere chiamata con un'operazione punto.

Estensione delle funzioni

Nell'estensione della funzione, Kotlin consente di definire un metodo al di fuori della classe principale. Nell'esempio seguente vedremo come l'estensione viene implementata a livello funzionale.

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
}

Nell'esempio precedente, non abbiamo alcun metodo all'interno della classe "Alien" denominato "addMySkills ()", tuttavia, stiamo ancora implementando lo stesso metodo da qualche altra parte al di fuori della classe. Questa è la magia dell'estensione.

La parte di codice precedente genererà il seguente output nel browser.

JAVA SQL

Estensione oggetto

Kotlin fornisce un altro meccanismo per implementare la funzionalità statica di Java. Ciò può essere ottenuto utilizzando la parola chiave "oggetto associato". Usando questo meccanismo, possiamo creare un oggetto di una classe all'interno di un metodo factory e in seguito possiamo semplicemente chiamare quel metodo usando il riferimento del nome della classe. Nel seguente esempio, creeremo un "oggetto compagno".

fun main(args: Array<String>) {
   println("Heyyy!!!"+A.show())
}
class A {
   companion object {
      fun show():String {
         return("You are learning Kotlin from TutorialsPoint.com")
      }
   }
}

La parte di codice precedente produrrà il seguente output nel browser.

Heyyy!!! You are learning Kotlin from TutorialsPoint.com

L'esempio sopra sembra statico in Java, tuttavia, in tempo reale stiamo creando un oggetto come variabile membro della stessa classe. Questo è il motivo per cui è incluso anche nella proprietà extension e può essere chiamato in alternativa come estensione dell'oggetto. Fondamentalmente stai estendendo l'oggetto della stessa classe per utilizzare alcune delle funzioni membro.