Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlin - Revisando la "Magia"

Kotlin - Revisando la "Magia"

En esta presentación miramos varias características importantes de Kotlin que lo hacen menos verboso y elimina el boilerplate sin embargo vamos allá viendo lo que genera el compilador y como interopera con Java

More Decks by Juan Guillermo Gómez Torres

Other Decks in Programming

Transcript

  1. Juan Guillermo Gómez GDE Firebase & GCP Kotlin and Android

    lover @jggomezt Kotlin Curiosity under the hood
  2. Juan Guillermo Gómez ➢ Co-Leader y Co-Founder of GDG Cali.

    ➢ Tech Lead WordBox & Founder DevHack ➢ Consultant and advisor on software architecture, cloud computing and software development. ➢ Experience in several languages and platforms. (C, C#, Java, Kotlin, Python, NodeJS, Android, GCP, Firebase). ➢ Google Developer Expert (GDE) in Firebase & GCP ➢ BS in System Engineering and a MS in Software Engineering. ➢ @jggomezt ➢ youtube.com/devhack
  3. Porque saber lo que Kotlin genera ? ❖ Entender mejor

    el lenguaje. ❖ Tener código sin overhead ❖ Mejora del rendimiento. ❖ Mejora de tiempos de compilación. ❖ Curiosidad.
  4. Qué genera Kotlin para... ❖ Data Classes ❖ Field Initialization

    ❖ Getters y Setters ❖ Constructors ❖ Objects ❖ Sealed Classes ❖ Lateinit ❖ Extension Functions ❖ Default arguments ❖ Inline Functions
  5. Data Classes ❖ Es un hold de datos ❖ Útil

    para crear entidades o modelos de dominio ❖ Mejora del rendimiento. ❖ Clases concisas y sin boilerplate
  6. Data Classes - Java Code Generado ❖ La clase es

    final así que no se puede heredar de ella. ❖ Sus atributos son val osea inmutable solo se tiene métodos get.
  7. Data Classes - Java Code Generado ❖ Crea un método

    constructor con sus parámetros. ❖ No crea un constructor sin parámetros.
  8. Field Initialization y Getters-Setters ❖ Se define un constructor inicializando

    algunos atributos. ❖ Algunos atributos son privados. ❖ Algunos atributos son inmutables. ❖ Algunos atributos son mutables. ❖ Todos tienen la palabra reservada val o var
  9. Field Initialization y Getters-Setters ❖ Se genera atributos privados para

    todos los parámetros del método constructor. ❖ Algunos tienen métodos get ❖ Algunos tienen métodos set. ❖ Si no tiene val o var el parámetro solo se podrá acceder en el constructor.
  10. Constructors ❖ Constructor principal. ❖ Bloque de código para el

    constructor principal. ❖ Sobrecarga de constructores.
  11. Lateinit ❖ Inicializa luego la variable ❖ Lanzará una excepción

    al momento de usarse y no se haya inicializado
  12. Lateinit ❖ Existe una forma de validar si fue inicializada.

    ❖ Generará un if para esa validación
  13. Objects ❖ Permite crear clases con el patrón singleton ❖

    Permite definir en un bloque de companion object variables estáticas. ❖ Permite definir una clase anónima con atributos primitivos
  14. Default arguments ❖ Usar la anotación JvmOverloads para construir los

    métodos necesarios en Java para llevar a cabo la sobrecarga
  15. Inline Functions ❖ Kotlin permite tener funciones como parámetros. ❖

    Esto genera asignaciones extras de memoria que podrían llevar a un overhead en ejecución
  16. Inline Functions ❖ Crea una clase por cada función y

    asignación de memoria en ejecución.
  17. Inline Functions ❖ Se puede asignar un inline en la

    función. ❖ Esto mejorará el overhead en ejecución. ❖ Usar el inline como buena práctica cuando el cuerpo del método tiene 1 a 4 líneas
  18. Inline Functions ❖ No crea clases ni asignaciones de memoria.

    ❖ Coloca todo el cuerpo del lambda en un método.
  19. Extension Functions ❖ Dejar de crear clases de utilidades. ❖

    Agregar funcionalidades a clases existentes sin modificarlas, sin extender y sin implementar patrones como el decorador.
  20. Sealed Classes ❖ Clases que no se pueden instanciar. ❖

    Clases que solo pueden ser heredadas por otras clases en el mismo archivo o adentro de esa clase. ❖ Útiles para representar un conjunto limitado de posibilidades ❖ Permite con el uso de when y el IDE evitar errores.
  21. Sealed Classes ❖ Son clases abstractas. ❖ Método constructor privado

    ❖ Método constructor sintético el cual es el que llaman sus clases hijas
  22. typealias ❖ En ocasiones definiciones de tipo podrían distraer lo

    que tu código hace y convertirse en algo no tan legible ❖ Kotlin nos brinda los typealias que son nombres alternativos a clases, tipos de datos que representan funciones y que no introduce un nuevo tipo
  23. Bonus: KAPT vs KSP Kotlin Compiler exhaustive search and finds

    all the elements in the project annotated Annotation Processor Received elements generates the required class files Compiled sources and its dependencies KAPT
  24. Bonus: KSP ❖ Kotlin Symbol Processing (KSP) is an API

    that you can use to develop lightweight compiler plugins. KSP provides a simplified compiler plugin API that leverages the power of Kotlin while keeping the learning curve at a minimum. Compared to KAPT, annotation processors that use KSP can run up to 2x faster. ❖ The authors promise direct access to Kotlin compiler features as well as compatibility for multi-platform projects. https://github.com/google/ksp
  25. Referencias ❖ https://medium.com/androiddevelopers/dont-argue-with-default-arguments-2245b2c752c ❖ https://medium.com/androiddevelopers/inline-functions-under-the-hood-12ddcc0b3a56 ❖ https://medium.com/androiddevelopers/sealed-with-a-class-a906f28ab7b5 ❖ https://blog.usejournal.com/kotlin-under-the-hood-the-magic-of-classes-part-1-9ef1030c0628 ❖

    https://moshenskyi.medium.com/kotlin-under-the-hood-the-magic-of-classes-part-2-f0f1aea130 56 ❖ https://moshenskyi.medium.com/kotlin-under-the-hood-extension-functions-1d61fabdf631 ❖ https://medium.com/androiddevelopers/data-classes-the-classy-way-to-hold-data-ab3b11ea493 ❖ https://medium.com/androiddevelopers/alter-type-with-typealias-4c03302fbe43