Golo <3 Java
Golo câest un langage qui âtourneâ dans la JVM, il est donc tout naturel quâil puisse âcommuniquerâ avec elle. Câest Ă dire ? : Golo peut utiliser toute les fonctionnalitĂ©s embarquĂ©es de java (les packages de base), mais aussi des librairies externes (des jars dâautres frameworks, ou les votres), on parle bien sĂ»r ici, dâINTEROPERABILITE.
Golo et Java, utiliser les fonctionnalités de base
Exemple : Les Strings & co
Alors de fait vous les utilisez dans Golo : var hello = "hello world !"
mais aussi avec les objets dans Golo qui âportentâ les primitives de base :
Cet exemple est crétin on peut trÚs bien caster directement :
Mais vous pouvez aussi utiliser les mĂ©thodes statiques de lâobjet String
:
Retenez bien :
- on utilise le
.
pour accéder aux membres statiques et:
pour les membres dâinstances. Ca surprend au dĂ©but, mais en fait on y gagne en lisibilitĂ© - nâoubliez pas le
import java.lang.String
sinon ça ne marchera pas
Autre exemple : les HashMaps
Je voue une passion inconsidérée et inexpliquées aux HashMaps, donc un petit exemple avant de rentrer dans le dur
vous obtiendrez donc :
key : PP -> name : Peter Petrelli
key : HN -> name : Hiro Nakamura
key : CB -> name : Claire Bennet
Donc, vous voyez, on dispose de la puissance de Java au service de Golo! :) Mais passons Ă plus fun.
Golo & les librairies externes
Faites votre jar : jouons au pays ACME avec Buster
Nous allons faire notre propre librairie, comme cela vous pourrez la modifier à loisir pour vos expérimentations. Nous avons cÎté Java :
# Une interface Toon.java
# Une classe TinyToon.java (qui implémente Toon)
# Un singleton BusterBunny.java
Jouons avec Buster
Vous me faites un jar tinytools.jar
avec les codes java ci-dessus, puis vs créez un nouveau script golo acme.golo
(au mĂȘme endroit que le jar pour le moment) :
# acme.golo
Pour exécuter ce script en précisant le fichier tinytools.jar
utilisé , créez un script acme.sh
(et rendez-le exécutable chmod +x
) :
# !/bin/sh
export CLASSPATH_PREFIX=${CLASSPATH_PREFIX}:tinytools.jar
gologolo $1
Maintenant, lancez ./acme.sh acme.golo
et vous allez obtenir :
Buster Bunny is running
Buster Bunny is screaming
Buster Bunny is talking : Hello
buster name : Buster Bunny
buster description : a blue male rabbit
Age : 13
# Explications
var buster = BusterBunny.getInstance()
on appelle la méthode statiquegetInstance()
pour avoir une instance (et la seule) de Busterbuster: age(13)
: on change lâage de Buster en utilisant une mĂ©thode dâinstancevar busterAgain = BusterBunny.getInstance()
on essaye dâavoir une 2Ăšme instance de Buster- et en fait câest bien la mĂȘme (un singleton donc) puisque lâon sâaperçoit que lâage de
busterAgain
est déjà égal à 13
Buster veut une copine, lâhĂ©ritage cĂ©mal, la composition câest bon
En Golo, hĂ©riter dâune classe Java nâest pas possible (pour le moment), mais nous allons voir que ce nâest pas forcĂ©ment utile. Je pourrais faire une classe java BabsBunny
, mais je nâai pas envie de refaire ma librairie java, donc je vais jouer avec les DynamicObjects (encore, mais jâaime tellement ça) et la composition et une sorte de pattern proxy. Modifiez donc le code de acme.golo
:
Jâai donc ajoutĂ© un DynamicObject BabsBunny
qui a une propriété acmeInstance
âcontenantâ une instance de la classe java TinyToon
et ensuite je reproduis les comportements de cette classe en créant des méthodes qui appellent les méthodes de la classe java.
Vous pouvez lancer ./acme.sh acme.golo
et vous allez obtenir :
Babs Bunny is running
Babs Bunny is screaming
Babs Bunny is talking : Hello
babs name : Babs Bunny
babs description : a pink female rabbit
Age of babs : 12
# La mĂȘme chose mais avec des mixins car il y a beaucoup de Tinytoons au pays ACME
Parce que le pays ACME nâest pas uniquement habitĂ© par Babs et Buster, que le copier/coller cĂ©mal, je vais faire un peu de refactoring de code :
Je vais créer un DynamicObject _TinyToon_
dont tous mes golo tinytoons hériteront via mixin()
:
Encore une fois lancez ./acme.sh acme.golo
et vous allez obtenir :
Help ! I'm Babs Bunny : a pink female rabbit, i'm chased by Elmira :(
Java aussi peut utiliser Golo, mais âŠ
LĂ aussi, câest possible, mais je ne vais pas mâĂ©tendre sur le sujet cette fois-ci, car ça peut faire un prochain article complet (ie: une application java scriptable en Golo), en attendant vous pouvez aller lire la documentation sur le sujet http://golo-lang.org/documentation/next/# _golo_class_loader.
Conclusion
âSi vous ne savez pas le faire en Golo, vous pourrez le faire en Java ⊠Mais en Golo vous pouvez en faire un maximum.â
42.
Tweet