Когда допустимо преждевременно вырваться из цикла / метода? - PullRequest
0 голосов
/ 09 июля 2019

Это вопрос, с которым я некоторое время сталкивался в классе моего колледжа, о котором я думал, и мне нужно узнать мнение других людей.Я искал и не мог найти другой вопрос, очень похожий на этот с точки зрения практики кодирования.

(примеры написаны на Java)
Когда я пишу свой код, я обычно пишу такие методы:

public void myMethod(int one, int two) {
    if (one >= two) return;
    // do things

    if (two != one) return;
    // do other things
}

Вместо того, чтобы писать методы, подобные этому:

public void myMethod(int one, int two) {
    if (one < two) {
        // do things
        if (two != one) {
            // do other things
        }
    }
}

Аналогично, я буду писать свои циклы следующим образом:

for (int i = 0; i < x.length; i++) {
    if (x[i].getValue() > 4) continue;
    // do things

    if (!xConditionTwo) continue;
    // do other things
}

Вместо этого:

for (int i = 0; i < x.length; i++) {
    if (x[i].getValue() <= 4) {
        // do things

        if (xConditionTwo) {
            // do other things
        }
    }
}

Как видно здесь, я смотрю на вещи последовательно (от верхней строки до нижней строки), и для меня имеет смысл выйти из метода / цикла, если это что-то не то, что мы ищемдля, и мы не требуем другого заявления.

Однако, когда я говорил с преподавателями моего колледжа, они все согласились, что если кто-то напишет такой код, их не будут нанимать, потому что указанный человек не можетВыясните алгоритм, который не требует использования продолжения / возврата.

Мой вопрос ко всем: когда допустимо использовать продолжение / возврат, чтобы прервать подобное, если вообще?Почему это считается плохой практикой, и как я могу избежать использования операторов if без другого, чтобы избежать дополнительных отступов?

1 Ответ

1 голос
/ 09 июля 2019

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

public void myMethod(int one, int two) {
    if (two >= one) {
       return;
    }
    // do things
    if (two != one) {
        // do other things
    }
}

Для меня это выглядит лучше и ограничивает вложенные операторы if

...