Extensions Flashcards
Que es una extension? Que podemos crear con las extensiones?
Es aquella que se crea sobre una clase de cualquier tipo que es el receiver de la siguiente forma nombre.extension . Con las extensiones podemos crear tanto funciones como properties. Son super utiles para crear funciones sobre librerias externas a las que no tenemos acceso.
Para que sirve la palabra reservada this en las extensiones?
Esta sirve para referirse al receiver dentro de la funcion de extension
Existen dos tipos de conflictos con las funciones de extension, cuales son? Tener en cuenta que las extensions se basan en el tipo del receiver
- Si hay dos extensiones de distintas clases con el mismo nombre cuando las llamemos se usara una u otra dependiendo del receiver sobre el que se este llamando la funcion
- Si creamos una funcion de extension dentro de una clase con el mismo nombre que uno de sus miembros ya existentes predominara el miembro cuando llamamos a dicha funcion. Una manera de solventar esto es sobrecargando la funcion y cambiando la firma, es decir añadiendo por ejemplo un argumento que diferencie la funcion de extension y el miembro.
printType
yprintType(i:Int)
Piensa un ejemplo de funcion de extension.
fun Int.add(i : Int) : Int{
return this+i
}
Piensa un ejemplo de extension property
fun Int.add(i : Int) : Int{
return this+i
}
Necesito usar la funcion de extension Int.add del paquete org.example.extension en el paquete org.example.usage que necesito hacer?
Importarlo de la siguiente manera: import org.example.extension.add
Que es el dispatch receiver y el extension receiver?
Cuando definimos una extension sobre un objeto de un tipo dentro de otra clase aparecen dos terminos. El dispatch receiver que es la clase sobre la que aplicamos la funcion de extension y el extension receiver que es la instancia del objeto sobre el que luego aplicamos la extension. Ejemplo en la clase Alumno que dentro tiene un objeto de la clase Colegio y creamos una extension sobre Colegio(dispatch receiver) y luego usamos la instancia (extension receiver) del objeto de la clase Colegio para llamar a la funcion de extension
Que es visible dentro de las funciones de extension en funcion de donde las creamos? 2 opciones
Una extension declarada en el top level puede acceder a cualquier identidad incluso los private que esten declarados en el top level del mismo file
Una extension declarada fuera de su clase receiver no podra acceder a los miembros de su receiver