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.
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.
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 aparser.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
Stringsigual 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-cliofrece una forma sencilla y elegante de procesar los argumentos a nuestros programas.
■
