KotlinPoet

kotlinpoet

KotlinPoet

KotlinPoet es una API para generar código fuente en Kotlin. De este modo, evitamos escribir boilerplate y conseguimos un código más robusto al tener una SSOT (Single Source Of Truth). 👏🏼

Se puede usar tanto desde Kotlin, como desde Java.

De hecho, es el sucesor natural de JavaPoet, que ya está más bien deprecado.

La gracia de KotlinPoet (o Kotlin Poet, como quieras llamarla), es que al usar Kotlin, tiene soporte para KSP. Con lo que las builds son más rápidas. Con JavaPoet, únicamente podemos usar KAPT. Y esto es un drawback importante. Sobre todo, a partir de que Dagger soporte KSP.

Este contenido está restringido.
Adquiere alguna formación.
O suscríbete para difrutar de los audios y vídeos exclusivos de Los androides Premium.

Por cierto, tienes disponible un repo de ejemplo, para así poder aplicar esto de un modo sencillo en tus proyectos.

De hecho, tienes tanto de KotlinPoet, como de JavaPoet.

Un poco para que te hagas a la idea, esto sería un modo de generar código con la herramienta:

package soy.gabimoreno.poetexample.kotlinpoet

import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.FunSpec
import com.squareup.kotlinpoet.KModifier
import com.squareup.kotlinpoet.PropertySpec
import com.squareup.kotlinpoet.TypeSpec

fun main() {
    val greeterClass = ClassName("", "Greeter")
    val file = FileSpec.builder("", "HelloWorld")
        .addType(
            TypeSpec.classBuilder("Greeter")
                .primaryConstructor(
                    FunSpec.constructorBuilder()
                        .addParameter("name", String::class)
                        .build()
                )
                .addProperty(
                    PropertySpec.builder("name", String::class)
                        .initializer("name")
                        .build()
                )
                .addFunction(
                    FunSpec.builder("greet")
                        .addStatement("println(%P)", "Hello, \$name")
                        .build()
                )
                .build()
        )
        .addFunction(
            FunSpec.builder("main")
                .addParameter("args", String::class, KModifier.VARARG)
                .addStatement("%T(args[0]).greet()", greeterClass)
                .build()
        )
        .build()

    file.writeTo(System.out)
}

Y esto sería la clase generada resultante:

import kotlin.String

public class Greeter(
  public val name: String,
) {
  public fun greet() {
    println("""Hello, $name""")
  }
}

public fun main(vararg args: String) {
  Greeter(args[0]).greet()
}

¡No está nada mal! 💯

Mucha potencia a la hora de reducir boilerplate en el trackeo de eventos, por solo poner un ejemplo.

Y a ti, ¿se te ocurre alguna aplicación práctica más? Cuéntanoslo en la comunidad.

Contenido del audio

Transcripción

Kotlin Poet es una API para generar código fuente
en Kotlin. De este modo evitamos escribir boilerplate y conseguimos un código más
robusto al tener una single source of truth. Se puede usar tanto desde Kotlin como desde
Java. De hecho es el sucesor natural de Java Poet que ya está más bien deprecado. La
gracia de Kotlin Poet es que al usar Kotlin tiene soporte para KSP, KSP con lo que las builds son más
rápidas o pueden llegar a ser más rápidas. Con Java Poet únicamente podemos usar KAPT y esto
es un dropa que es importante sobre todo a partir de que ya dagger soporte KSP. Por cierto tienes
disponible un repo de ejemplo en mi GitHub, ahí en gabimoreno.soy/github. El nombre del
repo es Kotlin Poet Example en un alar de originalidad para así poder aplicar todo esto de un modo
muy sencillo en tus proyectos. O sea que si quieres echarlo en vistazo lo tienes por ahí que tienes
ahí un ejemplito tanto para Kotlin Poet como para Java Poet. Y la verdad es que esto tiene un
montón de potencia a la hora de reducir boilerplate en el traqueo de eventos por ejemplo. Y a ti,
si te ocurre algún ejemplillo más, cuéntanoslo en nuestro chat premium. ¡Un abrazote!

Publicado: 2023-07-12