Frameworks CLI para Kotlin: creación de potentes aplicaciones de consola
Kotlin es un lenguaje moderno que se utiliza activamente no solo para el desarrollo de Android, sino también para crear aplicaciones de servidor y de consola. El desarrollo de herramientas CLI (Command Line Interface) en Kotlin puede simplificarse enormemente con la ayuda de frameworks especializados. En este artículo, analizaremos las tres soluciones más populares: Clikt, Kotlinx-cli y Aigrette, y las desglosaremos con ejemplos prácticos.
¿Por qué necesitas un framework CLI?
Escribir un analizador de argumentos de línea de comandos manualmente es una tarea tediosa y propensa a errores. Los frameworks CLI proporcionan:
- Análisis automático de argumentos y opciones
- Generación de ayuda (
--help) - Validación de datos de entrada
- Soporte para subcomandos (subcommands)
- Manejo de errores con mensajes claros
Clikt — la opción más popular
Clikt es una biblioteca potente y flexible que se ha convertido en el estándar de facto para CLI en Kotlin. Utiliza un enfoque declarativo con anotaciones y proporciona una API rica.
Instalación (a través de Gradle):
implementation("com.github.ajalt.clikt:clikt:4.2.1")Ejemplo de una aplicación simple:
import com.github.ajalt.clikt.core.CliktCommandimport com.github.ajalt.clikt.parameters.arguments.argumentimport com.github.ajalt.clikt.parameters.options.optionimport com.github.ajalt.clikt.parameters.types.int
class Greet : CliktCommand() { val name by argument() val count by option("--count", "-c", help = "Número de repeticiones").int().default(1)
override fun run() { repeat(count) { echo("¡Hola, $name!") } }}
fun main(args: Array<String>) = Greet().main(args)Ejecución:
./app --count 3 Iván# Salida:# ¡Hola, Iván!# ¡Hola, Iván!# ¡Hola, Iván!Clikt admite comandos anidados, autocompletado, colores en la consola y tipado estricto. Para proyectos complejos (por ejemplo, herramientas DevOps, utilidades para trabajar con API), esta es la mejor opción.
Kotlinx-cli — una solución ligera de JetBrains
Kotlinx-cli es una biblioteca oficial de los creadores de Kotlin. Es menos funcional que Clikt, pero es ideal para utilidades simples y proyectos pequeños.
Instalación:
implementation("org.jetbrains.kotlinx:kotlinx-cli:0.3.6")Ejemplo:
import kotlinx.cli.*
fun main(args: Array<String>) { val parser = ArgParser("file-util") val input by parser.argument(ArgType.String, description = "Archivo de entrada") val output by parser.option(ArgType.String, shortName = "o", description = "Archivo de salida").default("out.txt") val verbose by parser.option(ArgType.Boolean, shortName = "v", description = "Salida detallada").default(false)
parser.parse(args)
println("Leyendo de: $input") println("Escribiendo en: $output") if (verbose) println("Modo detallado activado")}Kotlinx-cli no requiere dependencias adicionales y es excelente para prototipado rápido. Sin embargo, no admite comandos anidados ni validación compleja.
Aigrette — enfoque funcional
Aigrette es una biblioteca menos conocida pero interesante que utiliza un estilo funcional. Se basa en el concepto de "combinadores de analizadores".
Instalación:
implementation("io.github.petertrr:aigrette:0.3.0")Ejemplo:
import io.github.petertrr.aigrette.*
data class Config(val name: String, val age: Int, val flag: Boo También en la biblioteca
Cliente Redis para Node.js: ioredis — una potente herramienta para trabajar con Redis
tsx para TypeScript: guía completa con ejemplos prácticos
Trabajo con imágenes en PHP: resize, crop (redimensionamiento y recorte)
Autorización y autenticación en PHP: guía completa con ejemplos
ORM para Kotlin: comparación y ejemplos (Exposed, Ktorm, Hibernate)