Подтвердить что ты не робот

Что означает знак вопроса в GSP/Grails?

Я видел это в моих сгенерированных страницах GSP. Что означает ??

<g:textField name="name" value="${phoneInstance?.name}" />
4b9b3361

Ответ 1

Это "безопасный навигатор", который является функцией Groovy, которая в кратчайшей степени избегает исключений из нулевого указателя. См. http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator

В этом случае, если phoneInstance имеет значение null, он не пытается получить свойство name и вызывает NPE - он просто устанавливает значение тега поля равным нулю.

Ответ 2

Оператор ? допускает нулевые значения в Groovy (и, следовательно, GSP). Например, обычно в gsp,

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

Если priceDetails равно null, это вызовет NullPointerException.

Если вместо этого использовать оператор ?...

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

теперь значение ${priceDetails?.amount} равно null, вместо того, чтобы выбрасывать исключение нулевого указателя.

Ответ 3

Это очень важная функция в Groovy. Если объект является нулевым (т.е. "phoneInstance" имеет значение NULL), тогда он предоставляет значение "null". Эта особенность называется "Safe Navigation Operator". Просто, когда мы используем эту функцию, нет необходимости в проверке объекта ( "phoneInstance" ) является нулевым или нет.

Ответ 4

безопасный навигационный оператор (?.) возвращает null, если объект слева равен null, иначе он возвращает значение правого члена этого объекта. поэтому phoneInstance?.name является только сокращенным для phoneInstance == null ? null : phoneInstance.name

например:

a = x?.y

просто сокращается для:

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

который является сокращением для:

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