Проверить только, если переменная не равна нулю в выражении if
У меня есть следующий метод, когда я хочу проверить свойство event.status
только в том случае, если status
был передан в:
def findEvent(String desc, String status = null, Collection events) {
return events.find {
it.description == desc && \\If status is not null: it.status == status
}
throw new Exception("Review Event Record Not Found: ${desc}")
}
Я думал, что это можно сделать так, но это не работает:
def findEvent(String desc, String status = null, Collection events) {
return events.find {
it.description == desc && (status != null ?: {it.status == status})
}
throw new Exception("Review Event Record Not Found: ${desc}")
}
Можно ли это сделать? Или мне нужно вернуться к чему-то вроде этого:
if (status != null) {
return events.find {
it.description == desc && it.status == status
}
} else if (status == null) {
return events.find {
it.description == desc
}
}
Есть ли какая-то лучшая практика?
Ответы
Ответ 1
Я не верю, что выражение является чувственным, как оно есть.
Элвис означает "если правдиво, используйте значение, иначе используйте эту другую вещь".
Ваша "другая вещь" - это закрытие, а значение status != null
, ни одно из которых не похоже на то, что вы хотите. Если status
имеет значение null, Элвис говорит true
. Если это не так, вы получите дополнительный слой закрытия.
Почему вы не можете использовать:
(it.description == desc) && ((status == null) || (it.status == status))
Даже если это не сработало, все, что вам нужно, это закрытие, чтобы вернуть соответствующее значение, не так ли? Нет необходимости создавать два разных вызова find
, просто используйте промежуточную переменную.