web-dev-qa-db-fra.com

Que signifie le point d'interrogation dans GSP/Grails?

J'ai vu cela dans mes pages générées du SPG. Que fait le ? signifier?

<g:textField name="name" value="${phoneInstance?.name}" />
41
Amir Raminfar

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.

62
Burt Beckwith

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.

4
R.V.RaguPrashanth

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
}
1
james turner

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.

1
Mohammed Shaheen MK