Parámetros Línea de Comandos. Kotlin
SOLUCIONARIO
Parámetros Línea de Comandos. Kotlin
2026-02-15
Por
Occam's Razor

fun main (args:Array<String>) {

    println ("${args.size} Parameters...");
    for ((i,v) in args.withIndex()) {
        println ("Parametro ${i}: ${v}");
    }
    if (args.size != 1) {
       println ("Solo un parametro por favor");
       return;
    }
    println ("Hola ${args[0]}");
}

Kotlin, como sabemos es primo hermano de Java, así que nos encontramos una solución muy parecida con pequeñas desviaciones de sintaxis. Los parámetros se reciben como un array de Strings. La propiedad size del array, en lugar de lenght que usa java, nos permite determinar el número de parámetros.

Como Java, Kotlin tampoco nos proporciona el nombre del programa como primer parámetro… Y al igual que en Java no es trivial obtener esta información.

SOY CURIOSO

Como comentamos para Java, el siguiente código nos permite obtener el nombre del fichero que pasamos a Kotlin en la línea de comando y los parámetros…

 println(System.getProperty("sun.java.command"))

Al igual que los demás lenguajes, Kotlin ofrece varias alternativas para procesar los argumentos de la línea de comandos de forma sencilla. kotlinx.cli es una de las más sencillas y accesibles. Para poder compilar nuestro programa de forma manual, debemos descargar el fichero .jar para esta librería de Maven Central. Nosotros hemos utilizado la version 0.3.6, pero quizás haya nuevas versiones cuando estéis leyendo esto.

La forma de utilizarla es muy sencilla. Este es un ejemplo de nuestro programa de ejemplo:

import kotlinx.cli.*

fun main (args: Array<String>) {
    val parser = ArgParser("ejemplo")
    
    val input  by parser.option (
        ArgType.String,
        fullName = "input",
        shortName = "i"
    ).default ("input.txt")
    val output  by parser.option (
        ArgType.String,
        fullName = "output",
        shortName = "o"
    ).default ("output.txt")

    try {
        parser.parse(args)
    } catch (e: Exception) {
        System.err.println ("Error:L ${e.message}")
        kotlin.system.exitProcess(1)
    }
    println ("Input : $input")
    println ("Output : $output")
   
}

La forma de utilizar este paquete es muy sencilla e intuitiva. Simplemente añadimos los parámetros que queremos procesar y llamamos a parse. Notad que el paquete maneja automáticamente los flags -h y --help. Estos flags generan una excepción HelpRequested que podemos capturar por si deseamos un comportamiento diferente, sino, el manejador por defecto genera una lista de los argumentos automáticamente.

SABÍAS QUE?

Podéis añadir un valor para la descripción de los argumentos, simplemente añadiendo description='tu descripcion aquí como argumento adicional a la llamada a parser.option

Para compilar este programa debemos utilizar el siguiente comando, para incluir el paquete que hemos descargado

$ kotlinc cmdline-getopt.kt -cp ./kotlinx-cli-jvm-0.3.6.jar -include-runtime -d app.jar

De la misma forma, para la ejecución de nuestro programa, debemos incluir el paquete en el ClassPath o indicarlo explícitamente al ejecutar el programa.

$ java -cp ".:app.jar:kotlinx-cli-jvm-0.3.6.jar" Cmdline_getoptKt --help

RESUMEN

  • Kotlin recibe los argumentos de la línea de parámetros como un array de Strings igual que Java.
  • El primer argumento no contiene el nombre del programa. Es necesario utilizar otros métodos para averiguarlo. Por tanto, tampoco es posible modificarlo manipulando los argumentos
  • El paquete kotlinx-cli ofrece una forma sencilla y elegante de procesar los argumentos a nuestros programas.

SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)