Должен ли я использовать оператор return / continue вместо if-else? - PullRequest
28 голосов
/ 08 июня 2009

В C, C ++ и C # при использовании условия внутри оператора функции или цикла можно использовать оператор continue или return как можно раньше и избавиться от else ветвь оператора if-else . Например:

while( loopCondition ) {
    if( innerCondition ) {
        //do some stuff
    } else {
        //do other stuff
    }
}

становится

 while( loopCondition ) {
    if( innerCondition ) {
        //do some stuff
        continue;
    }
    //do other stuff
}

и

void function() {
    if( condition ) {
        //do some stuff
    } else {
        //do other stuff
    }
}

становится

void function() {
    if( condition ) {
        //do some stuff
        return;
    }
    //do other stuff
}

Вариант "после" может быть более читабельным, если ветви if-else длинные, поскольку это изменение исключает отступ для ветви else.

Является ли такое использование return / continue хорошей идеей? Есть ли какие-либо проблемы с обслуживанием или читабельностью?

Ответы [ 13 ]

2 голосов
/ 08 июня 2009

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

Кроме того: что говорят все остальные. Делайте то, что наиболее читабельно, что зависит от относительной длины, важности и вероятности «некоторых вещей» и «других вещей». Чем короче, более тривиален и маловероятен случай, тем меньше беспокоит его наличие потока управления в особом случае.

1 голос
/ 08 июня 2009

Я обычно использую метод if-return при выходе из метода или цикла, потому что ничего не поделаешь.

Если тело длиннее из-за того, что выполняется значительная работа, я предлагаю использовать if-else и, возможно, использовать # region , чтобы дать блокам разумное имя и легко сложить их, чтобы люди могли изучать поток управления. , Что либо делай отдельными методами:)

0 голосов
/ 15 февраля 2017

В моем коде было следующее:

    while(){
      boolean intersect = doesIntersect(interval_1,interval_2);
      if(!intersect){
         array.add(interval_2);
         if(// another condition){
            // Do some thing here
         }
         continue;
      }
      // other stuff to do if intersect
    }

Смущало, стоит ли мне использовать continue там или использовать else , но я решил, что внутреннее условие if может сделать остальное плохо читаемым, поэтому я использовал continue.

Я думаю, что читаемость имеет значение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...