Должны ли условия испытывать положительные или отрицательные результаты?

Извините, если заголовок довольно неоднозначный, я не был уверен, как его сложить.

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

Возможно, некоторые примеры помогут:

Что я имею в виду, тестируя отрицательный результат:

if(myObject == null) {
    return;
}

//do whatever with myObject

Что я имею в виду, тестируя положительный результат:

if(myObject != null) {
    //do whatever with myObject
}

Извините, если кто-то может сказать это лучше меня, пожалуйста, сделайте.

Ответ 1

Я лично предпочитаю первый метод проверки, если объект имеет значение null, а затем сразу возвращается. Он позволяет "реальному коду" оставаться незамкнутым, линейным и может предотвратить множество вложенных операторов if, которые, как мне кажется, более читабельны. В противном случае оба пути действительны и будут иметь одинаковые результаты. Выберите то, что лучше всего работает в вашей ситуации (что может зависеть от каких-либо других, а также от операторов if).

Вот хороший пример:

if (object1 == null) {
    return;
}
// do some stuff
if (object2 == null) {
    return;
}
// do some stuff
if (object3 == null) {
    return;
}

Против:

if (object1 != null) {
    // do some stuff
    if (object2 != null) {
        // do some stuff
        if (object3 != null) {
            // do some stuff
        }
    }
}

Я считаю, что первый из них будет более читаемым.

Ответ 2

Если существует допустимое действие, которое может быть выполнено для удовлетворения положительного условия, например регистрации, что набор результатов пуст или что переменной не присвоено, тогда лучше использовать положительные условия. API могут помочь здесь, например Apache Commons StringUtils isNotBlank(), когда вы тестируете строки. Однако иногда самая чистая вещь - пойти на отрицательный тест, например, разрешить обработку только там, где переменная не равна нулю.