Modèle de conception Commande en langage Groovy
Le modèle de conception Commande fait partie des modèles de conception de type comportemental, présenté notamment dans le célèbre livre Design Patterns: Elements of Reusable Object-Oriented Software de Erich Gamma, Richard Helm, Ralph Johnson, et John Vlissides.
Dans cet article, je donnerai un exemple d'implémentation de ce modèle de conception en langage Groovy, dans le style de programmation orientée objet, puis ensuite dans le style de la programmation fonctionnelle, avec beaucoup moins de "cérémonie" (moins de déclarations de type).
Enregistrer automatiquement un document WSDL en ligne avec ses dépendances
Lorsqu'une application ou un service expose un service web SOAP et publie son document de description d'interface en ligne, son document WSDL (Web Services Description Language), il peut être pratique d'enregistrer localement ce document, ainsi que tous les documents importés, que ce soit d'autres documents WSDL ou des schémas XML, tout en gardant les liens entre ces documents.
Voeux scriptés avec CompletableFuture
En ce début d'année 2019, j'exprimais sur LinkedIn mes buts pour la nouvelle année, sous la forme d'un script Groovy utilisant l'API CompletableFuture de Java 8 :
Exemples de scripts Groovy pour produire et consommer des messages avec Apache Kafka
Si Apache Kafka permet d'exécuter des producteurs et des consommateurs de messages vers ou depuis des topics en mode console, il peut aussi être utile et pratique d'écrire ses propres producteurs et consommateurs, sous la forme de scripts Groovy.
Les exemples de scripts proposés ici tirent parti du système Grape de Groovy, pour télécharger automatiquement, si besoin, les librairies dépendantes ; on a ainsi des scripts autonomes s'exécutant grâce à la commande groovy
.
Lambdas et closures
Mise à jour le 14 juil. 2022.
Dans la page web Lambda, Martin Fowler décrit les lambdas comme un concept informatique appelés également Closures, Fonctions Anonymes ou Blocs.
Un lambda est un bloc de code pouvant être passé en tant que valeur comme paramètre dans un appel de fonction ; cette valeur peut aussi être exécutée à la demande.
On parle de closure si un lambda fait référence à des variables en dehors du contexte dans lequel il est créé.
Fermer automatiquement une ressource avec la fonction use de Kotlin
La fonction use
du langage Kotlin est l'équivalent de la construction try-with-resources
du langage Java (apparue en version 7), car elle permet de fermer automatiquement un objet dont le type supporte l'interface Closeable
.
L'intérêt d'une telle fonction est d'assurer que la ressource que l'on utilise sera bien refermée automatiquement (et que les ressources du système associées soient libérées), par un appel à la méthode Closeable.close()
.
GORM pour Hibernate dans un script Groovy
GORM (Grails Object Relational Mapping) est une librairie d'accès aux données utilisée par le framework web Grails et qui, dès sa première version, s'est appuyée sur Hibernate pour faciliter le mapping entre le modèle objet et le modèle relationnel d'une application.
Aujourd'hui, GORM se décline en plusieurs implémentations pour MongoDB, Cassadra et Neo4j.
with(Kotlin)
Le langage Kotlin dispose d'une fonction pratique appelée with
, qui permet de regrouper des appels sur une même référence, ce qui évite de répéter celle-ci.
Piloter votre Bot (Wit.ai) en langage Groovy
odelia-groovy-wit est une librairie Groovy dont je suis l'auteur et qui permet de s'interfacer avec l'API du moteur de Bots de Wit.ai.
Le but est de pouvoir développer des applications conversationnelles en s'appuyant sur le moteur de Wit.ai : celui-ci analyse les phrases qu'on lui soumet et indique quelle devrait être la prochaine action à exécuter, et c'est donc votre application qui pilote l'avancement de la conversation avec votre bot.
Filtrer les lignes d'un fichier en Groovy
Voici un exemple de ce que permet le langage Groovy, tiré d'un cas réel, dans lequel on souhaite récupérer une partie précise de certaines lignes provenant d'un fichier texte.
Ce fichier texte sert à coder des commandes d'impression qui seront interprétées par la suite pour effectuer une impression réelle.