Читаемость кода: если условия foreach в переполнении стека

Какова лучшая практика и лучшая читаемость для вас:

foreach ($k as $v) {

if($v == 10) {
continue;
}

// continue code ...
}

Или же :

foreach ($k as $v) {

if($v != 10) {
// code ...
}

}

Может быть, это глупо, но я часто задаю себе этот вопрос.
Что ты думаешь это?

-1

Решение

Это скорее опрос, чем вопрос, и поэтому ответ не будет правильным.

Но, как правило, если ваш if является отрицанием или легко записывается как другой случай в соответствующий if (как в if ($v == 10) {} else {/*...*/}) Я бы пошел с continue, Так что, если я хочу запустить все дела для $v за исключением нескольких исключений, я бы отфильтровать эти исключения в начале и сделать continue для них.

Итак, я бы предпочел:

foreach ($k as $v) {

if($v == 10) {
continue;
}

// code ...
}

Причина этого в том, что когда возникает больше исключений, их можно легко добавить вот так.

foreach ($k as $v) {
if($v == 10 || $v == 29) {
continue;
}
if($v = 12) {
continue;
}

// ... code
}

Конечно, это также может быть достигнуто с

if ($v != 10 && $v != 29 && $v != 12) {
// ... code
}

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

Возьми этот пример. Как вы думаете, что является более понятным и менее сложным для понимания?

foreach ($k as $i => $v) {
if ($i = 8) { continue; }
if ($i % 3) { continue; }
if ($v['foo'] == 'bar') { continue; }
if ($v['bar'] == 'foo') { continue; }
if ($v['foobar'] == 10) { continue; }
if ($v['value'] < 0 || $v['value'] > 100) { continue; }

// else, do code...
}

Или же…

foreach ($k as $i => $v) {
if ($i != 8 && !($i & 3) && $v['foo'] != 'bar' && $v['bar'] != 'foo' && $v['foobar'] != 10 && $v['value'] >= 0 && $v['value'] <= 100) {
// do code ...
}
}

Кроме того, я обнаружил, что отрицания труднее понять (сделать это, если не равно 10 более склонен к умственному срыву, чем пропустить, если равно 10).

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

1

Другие решения

Этот вопрос основан на стандартах кодирования, с которыми вы работаете, по моему мнению.

я предпочитаю

foreach ($k as $v) {
if($v != 10) {
// code ...
}
}

Таким образом, я буду знать, что он будет делать что-то только тогда, когда $v отличается от 10. Первый вариант говорит, что это будет продолжаться, тот же результат. Но у вас есть, если какой-то код, вы можете запутаться.

Ответ все еще основан на том, что вы предпочитаете.

0