A la base, comme java tout commence avec la fonction main :
fun main(args: Array<String>) {...}
Les paramètres sont donc une simple list de strings, sans aucune structure. Or vous souhaitez pouvoir configurer facilement votre programme avec des options, obligatoires ou facultatives.
L'analyse des options avec une simple boucle sur "args" est triviale, et tout à fait respectable.
Si néanmoins, vous voulez faire pro, avec une aide en ligne, bien présentée, et surtout écrire un code un peu plus haut-niveau, il vous faut une librairie.
J'ai choisi la première venue de chez Apache : commons-cli. J'ai commencé évidemment à l'utiliser telle quelle, et comme toute librairie Java, on l'intègre sans souci dans le projet Kotlin.
Mais le résultat n'est pas très optimal, et ne tire aucun avantage de Kotlin. J'ai voulu encapsuler cette libraire en Kotlin. Voici le résultat:
fun main(args: Array<String>) {
options {
option("h", "help", false, "Display help")
option("t", "to", true, "List of recipients")
option("m", "maxNbOfPosts", true, "Maximum number of posts")
}.parse("Notif [options]", args) {
if (hasOption("help")) printHelp()
else execute (stringOption("to"), intOption("maxNbOfPosts", 50))
}
}
Le début est une construction avec une syntaxe déclarative. Le sujet a été traité ici.
La commande parse est suivie par l'exécution réelle du programme. Le paramètre 50 est la valeur par défaut en cas d'absence.
Toute erreur de syntaxe lors de l'appel du programme affichera l'aide ("printHelp") :
usage: Notif [options]
-h,--help Display help
-m,--maxNbOfPosts <arg> Maximum number of posts
-t,--to <arg> List of recipients
La syntaxe de l'API est certainement perfectible, mais le résultat est à la hauteur de mes ambitions.
Le code de l'encapsulation Kotlin est librement disponible ici
.
Aucun commentaire:
Enregistrer un commentaire