J'ai vu cela dans mes pages générées du SPG. Que fait le ? signifier?
<g:textField name="name" value="${phoneInstance?.name}" />
C'est le "Safe Navigation Operator", une fonctionnalité de Groovy qui évite clairement les exceptions de pointeur nul. Voir http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator
Dans ce cas, si phoneInstance
est null, il n'essaie pas d'obtenir la propriété name
et ne crée pas de NPE - il définit simplement la valeur de la balise de champ sur null.
L'opérateur ?
autorise les valeurs NULL dans Groovy (et donc, GSP). Par exemple, normalement dans gsp,
<g:field name="amount" value="${priceDetails.amount}" />
Si priceDetails
est null, cela lancera une NullPointerException
.
Si nous utilisons l'opérateur ?
à la place ...
<g:field name="amount" value="${priceDetails?.amount}" />
désormais, la valeur de ${priceDetails?.amount}
est null, au lieu de générer une exception de pointeur null.
l'opérateur de navigation sécurisée (?.) renvoie la valeur null si l'objet de gauche est nul, sinon il renvoie la valeur du membre de droite de cet objet. alors phoneInstance?.name
est juste un raccourci pour phoneInstance == null ? null : phoneInstance.name
par exemple:
a = x?.y
est juste un raccourci pour:
a = (x == null ? null : x.y)
qui est un raccourci pour:
if(x == null){
a = null
} else {
a = x.y
}
C'est une fonctionnalité très importante dans Groovy. Si l'objet est null (c'est-à-dire que "PhoneInstance" est null), il fournit alors la valeur "null". Cette fonction Est appelée "Opérateur de navigation sécurisée". Lorsque nous utilisons cette fonctionnalité, aucun besoin de vérifier l’objet ("phoneInstance") n’est null ou non.