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

Проверить только, если переменная не равна нулю в выражении 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
    }
}

Есть ли какая-то лучшая практика?

4b9b3361

Ответ 1

Я не верю, что выражение является чувственным, как оно есть.

Элвис означает "если правдиво, используйте значение, иначе используйте эту другую вещь".

Ваша "другая вещь" - это закрытие, а значение status != null, ни одно из которых не похоже на то, что вы хотите. Если status имеет значение null, Элвис говорит true. Если это не так, вы получите дополнительный слой закрытия.

Почему вы не можете использовать:

(it.description == desc) && ((status == null) || (it.status == status))

Даже если это не сработало, все, что вам нужно, это закрытие, чтобы вернуть соответствующее значение, не так ли? Нет необходимости создавать два разных вызова find, просто используйте промежуточную переменную.