Какова цель вопросительного знака (?) После переменной в Groovy
Я новичок в grails. Во многих примерах я обнаружил, что переменная может заканчиваться вопросительным знаком (?)
как это
boolean equals(other) {
if(other?.is(this))
return true
}
выше код содержит Если условие в том, что другое заканчивается на? поэтому я хочу знать смысл этого представления
Ответы
Ответ 1
?.
- это нулевой безопасный оператор, который используется для предотвращения неожиданного NPE.
if ( a?.b ) { .. }
совпадает с
if ( a != null && a.b ) { .. }
Но в этом случае is()
уже является нулевым, поэтому вам это не понадобится
other.is( this )
должно быть хорошо.
Ответ 2
Существует тонкость ?.
, Безопасный навигатор, не упомянутый в ответе @dmahapatro.
Позвольте мне привести пример:
def T = [test: true]
def F = [test: false]
def N = null
assert T?.test == true
assert F?.test == false
assert N?.test == null // not false!
Другими словами, a?.b
совпадает с a != null && a.b
только при тестировании для булевого значения. Разница в том, что первая может либо оцениваться до a.b
, либо null
, а вторая может быть только a.b
или false
. Это имеет значение, если значение выражения передается другому выражению.