перерыв; против продолжения; против возвращения; - PullRequest
26 голосов
/ 23 декабря 2011

Я загрузил бесплатную рассылку, написанную на php, с hotscripts.com

Я немного обновил код, чтобы добавить новые функции, и увидел что-то, чего я не понимаю.

В коде, который я вижу:

foreach() { ...
 if() ...
  break;
 elseif() ...
  continue;
}

Я также видел:

function() {
// ...
for($nl = 0; ...
 if() ...
  return true;
}

Я прочитал, что break; остановит цикл, continue пропустит цикл доследующая итерация и return выйдет из функции.

Чего я не понимаю, так это зачем писать этот стиль?Почему бы не использовать что-то вроде:

function() {
// ...
 for($nl = 0; ...
  if() ...
   $returnValue = true;
  else {
   $returnValue = false;
  }
 }
 return $returnValue;
}

или ту же идею в циклах for?

Ответы [ 3 ]

34 голосов
/ 23 декабря 2011

Использование таких ключевых слов, как break и continue, может значительно облегчить чтение кода по сравнению с тем, что вы предлагаете.

Особенно, если вы вложили, если / else-операторы более чем на один уровень.

Сравните фрагменты ниже в этом посте, какой из них легче читать? Они оба выводят одну и ту же вещь, и $A равно array (1,2,4,4,3,4).

A return в цикле (внутри функции) может сохранить драгоценные циклы ЦП, если вы знаете, что вам больше не нужно выполнять цикл, зачем это делать? Я слишком крут, чтобы использовать break / continue .. $not_even_found = false; foreach ($A as $v) { if ($v != 1) { if ($not_even_found) { } else if ($v % 2 != 0) { $not_even_found = true; } else { echo "$v\n"; } } } Я хочу иметь читабельный код .. foreach ($A as $v) { if ($v == 1) continue; if ($v % 2 != 0) break; echo "$v\n"; }

13 голосов
/ 23 декабря 2011

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

ФактическиВернись, останови цикл.Глупый пример

function in_array($needle, $haystack){
   for($i = 0; $i < count($haystack); i++){
      if($needle === $haystack[$i]{
          return $i;
      }
   }
   return -1;
}

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

0 голосов
/ 23 декабря 2011

Некоторые «почему» сводятся к личным предпочтениям. Отчасти это зависит от того, нужно ли делать что-то еще в той же функции, прежде чем она вернется. Если больше ничего не нужно делать, а функция просто должна возвращать ответ «истина» или «ложь», то наиболее целесообразным является непосредственное использование return true;. Если вам по-прежнему нужно выполнять какие-то другие действия даже после принятия решения, возвращать ли значение true или нет (например, закрыть дескриптор файла), тогда может потребоваться присвоить ответ переменной и затем вернуть его в конце.

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