it-swarm.com.de

Was bedeutet das Fragezeichen in APS/Grails?

Das habe ich auf meinen generierten APS-Seiten gesehen. Was macht das? bedeuten?

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

Es handelt sich um den "Safe Navigation Operator", eine Groovy-Funktion, die Nullzeiger-Ausnahmen prägnant vermeidet. Siehe http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator

In diesem Fall, wenn phoneInstance null ist, wird nicht versucht, die name-Eigenschaft abzurufen und eine NPE zu verursachen. Sie setzt lediglich den Wert des Feld-Tags auf null.

62
Burt Beckwith

Der ?-Operator lässt in Groovy (und damit auch in GSP) Nullwerte zu. Zum Beispiel normalerweise in gsp, 

<g:field name="amount" value="${priceDetails.amount}" />

Wenn priceDetails null ist, wird eine NullPointerException ausgelöst.

Wenn wir stattdessen den Operator ? verwenden ... 

<g:field name="amount" value="${priceDetails?.amount}" /> 

der Wert von ${priceDetails?.amount} ist jetzt null, anstatt eine Nullzeiger-Ausnahme auszulösen.

4

der sichere Navigationsoperator (?.) gibt null zurück, wenn das linke Objekt null ist. Andernfalls wird der Wert des rechten Elements dieses Objekts zurückgegeben. phoneInstance?.name ist also nur eine Abkürzung für phoneInstance == null ? null : phoneInstance.name

zum Beispiel:

a = x?.y

ist nur eine Abkürzung für:

a = (x == null ? null : x.y)

was ist die Abkürzung für:

if(x == null){
    a = null
} else {
    a = x.y
}
1
james turner

Dies ist eine sehr wichtige Funktion in Groovy. Wenn das Objekt null ist (dh "PhoneInstance" ist null), ist der Wert "null" anzugeben. Diese Funktion Wird als "Safe Navigation Operator" bezeichnet. Wenn wir diese Funktion verwenden, ist die Überprüfung des Objekts ("phoneInstance") nicht erforderlich.

1