Должен ли я использовать else, когда if содержит возврат? - PullRequest
0 голосов
/ 13 июля 2010

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

//example 1
if(someCondition)
{
   return (someValue);
}
return (someOtherValue);

//example 2
if(someCondition)
{
   return (someValue);
}
else
{
   return (someOtherValue);
}

Лично мне второй пример больше нравится, потому что он более явный, и я чувствую, что он более читабелен.

Ответы [ 6 ]

6 голосов
/ 13 июля 2010

Если ваш язык содержит условный оператор, я бы порекомендовал использовать его.

return condition ? ifTrue : ifFalse;
3 голосов
/ 13 июля 2010

Лично в случае, когда это часто встречается, вы удаляете недопустимые состояния из вызова функции / метода. Например:

sqrt(x) {
    if(x < 0)
        return 0;

    answer=math;
        return(answer);

Если вы используете elses, вы можете получить много действительно ужасных вложений.

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

В вашем конкретном примере это 50/50 IMO.

Делай, что хочешь, но я настоятельно рекомендую попробовать теорию "Немедленно проверь и вернись для простых случаев".

3 голосов
/ 13 июля 2010

Нет никакой разницы, кроме внешнего вида.Оба вернутся одинаково, независимо от того, какой вы выберете.

2 голосов
/ 13 июля 2010

Избежание else и использование ранних return может помешать вашему коду стать слишком глубоким. Какой пример выглядит более читабельным?

function doStuff (thing) {
  if (thing.foo) {
    alert ("thing.foo is alive and well");
    if (thing.foo.bar) {
      alert ("thing.foo.bar is alive and well");
      if (thing.foo.bar.baz) {
        alert ("thing.foo.bar.baz is alive and well");
        // TODO: stuff with thing.foo.bar.baz
      } else {
        alert ("thing.foo.bar.baz doesn't exist!");
      }
    } else {
      alert ("thing.foo.bar doesn't exist!");
    }
  } else {
    alert ("thing.foo doesn't exist!");
  }
}

или

function doStuff (thing) {
  if (!thing.foo) {
    alert ("thing.foo doesn't exist!");
    return;
  }
  alert ("thing.foo is alive and well");
  if (!thing.foo.bar) {
    alert ("thing.foo.bar doesn't exist!");
    return;
  }
  alert ("thing.foo.bar is alive and well");
  if (!thing.foo.bar.baz) {
    alert ("thing.foo.bar.baz doesn't exist!");
    return;
  }
  alert ("thing.foo.bar.baz is alive and well");
  // TODO: stuff with thing.foo.bar.baz       
}

... Я думаю, что второе намного более читабельно!

2 голосов
/ 13 июля 2010

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

Насколько я знаю, на самом деле для этого нет соглашения.

1 голос
/ 13 июля 2010

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

def returnVal = default;

if (cond) {
 returnVal = whatever
}

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