Est-il possible de créer un objet sans déclarer la classe? Comme en JavaScript obj = {a: '1'}; console.log(obj.a)
Dans Groovy, vous devez toujours fournir la classe d'un objet en cours de création. Il n'y a donc pas d'équivalent dans Groovy à la syntaxe littérale-objet de JavaScript.
Cependant, Groovy a une syntaxe littérale pour Map
, conceptuellement très similaire à un objet JavaScript, c’est-à-dire qu’il s’agit d’un ensemble de propriétés ou de paires nom-valeur.
Le code Groovy équivalent au JavaScript ci-dessus est:
def obj = [a: '1']
println obj.a
Même si aucun nom de classe n'est utilisé ici, vous créez toujours un objet d'une classe particulière (Java.util.LinkedHashMap
). Le code ci-dessus n'est qu'un raccourci pour:
def obj = new LinkedHashMap();
obj.a = '1'
println obj.a
La classe Expando
est peut-être encore plus similaire à un objet JavaScript et est utile lorsque vous souhaitez éviter le "surcoût" de la définition d'une classe ou que vous souhaitez un objet dynamique auquel toute propriété arbitraire peut être ajoutée au moment de l'exécution.
Légèrement surpris que personne n'ait mentionné la classe Expando. Cela ajoute des fonctionnalités supplémentaires sur une carte dans la mesure où vous pouvez directement référencer des propriétés dans vos fonctions. Exemple de code ci-dessous.
def expando = new Expando(a:"def")
expando.run = {def b ->
println("$a")
println("$b")
}
expando.run("ABC")
def map = [a:"def"]
map.run = {def b ->
println("$a") //THIS DOES NOT WORK. You will get a missing property exception.
println("$b")
}
map.run("ABC")
sortie imprimée:
def
Abc
groovy.lang.MissingPropertyException
ABC (si vous commentez le println ($ a) dans la map.run, println ($ b) imprime ABC)
Ignorer les sauts de ligne supplémentaires dans la sortie. Avait un sacré bout de temps mettant def et ABC sur des lignes consécutives.
Consultez la Documentation sur l'API Expando pour plus d'informations.
Groovy a une notation équivalente pour JSON. La seule différence est qu'ils utilisent [:] pour les cartes au lieu de {}. Ainsi, vous pouvez clairement convertir un JSON en une notation d'objet groovy.
import groovy.json.JsonOutput
def obj = [:] //define map
obj.batsmen = [] //define array
def b = [:]
b.name= "V. Kohli"
b.score = 55
b.strike = false
obj.batsmen.Push(b)
//Push second object
obj.batsmen.Push(b)
println JsonOutput.toJson(obj)
Ici, je n'ai pas directement imprimé l'objet. Depuis il imprimera avec la notation d'accolades carrées
Lire l'intégralité de l'article. Groovy pour les développeurs javascript . https://metamug.com/article/groovy-for-javascript-developers.php