Подтвердить что ты не робот

Break; против продолжения; против возврата;

Я загрузил бесплатный информационный бюллетень, написанный на 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?

4b9b3361

Ответ 1

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

Особенно, если вы вложенные, если /else -statements более одного уровня.

Сравните фрагменты ниже в этом сообщении, что легче читать? Оба они выводят одну и ту же вещь, а $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";
}

Ответ 2

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

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

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

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

Ответ 3

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