Более простое логическое условие для проверки непустых требований - PullRequest
0 голосов
/ 15 ноября 2011

У меня есть простая логика, чтобы проверить, является ли поле действительным:

private boolean isValidIfRequired(Object value) {
    return
        (required && !isEmpty(value)) || !required;
}

сообщает, что поле действительно, если оно либо обязательно, либо не пусто, либо не обязательно.

Мне не нравится, что требуется || ! обязательная часть. Что-то с только что потребовалось бы лучше. Как мне упростить этот метод, чтобы сделать его более читабельным и простым?

Ответы [ 2 ]

6 голосов
/ 15 ноября 2011

Как насчет:

private boolean isValidIfRequired(Object value) {
    return !required || !isEmpty(value);
}

или (спасибо, @Peter Lawrey)

private boolean isValidIfRequired(Object value) {
    return !(required && isEmpty(value));
}

В любом случае, если required равно false, ||или && выражение будет короткое замыкание и isEmpty никогда не будет вызвано.Если required равно true, будет вычислена вторая половина || или &&, вызвав isEmpty и вернув (инвертированный) результат этого вызова.

1 голос
/ 19 ноября 2011

Ожидаемое возвращение isValidIfRequired () должно возвращать true.

Таким образом, исключительные случаи должны быть помещены в начале как пункты-хранители:

private boolean isValidIfRequired(Object value) {

  if (required && empty(value))   //guardian clausule
      return false;

  return true;
}

для меня приведенный выше кодболее читабельный, чем совместное использование выражений, содержащих И, ИЛИ и отрицания

...