Чистые принципы кодирования обычно включают правило, что функции должны быть небольшими и одноцелевыми.Чистое кодирование: как разбить петли внутри вызова функции внутри петли
Из книги Роберта Мартина, Чистый код: «Первое правило функций является то, что они должны быть небольшими Второе правило функций является то, что они должны быть меньше, чем..»
Это трудно придерживайтесь, если у меня есть функция со сложным циклом, который содержит ветви, которые могут разбить цикл. Например, этот код в шахматном варианте предназначен, чтобы позволить аппарату атаковать, прыгая через другую единицу на борту:
for (arow = row, acol = col - 1, found_obstacle = false; acol >= 0; --acol) {
if (!found_obstacle) {
if (cellHasUnit(arow, acol)) found_obstacle = true;
continue;
} else {
if (cellHasUnit(arow, acol)) {
if (!cellHasAlly(arow, acol))
_dangerzones.insert(std::make_pair(arow, acol));
break;
}
}
}
Я понимаю, что вы не можете разорвать петлю внутри функции, где функция называемый внутри этого цикла.
Что такое хороший способ обработки сложных условий прерывания внутри петель, чтобы поддерживать чистый код с короткими функциями? Я могу представить, используя специальную функцию с возвращаемым значением, чтобы указать, нужны ли перерывы, но это все равно означает, что для каждого разрыва требуется его собственная функция. Если у меня много условий прерывания, это означает, что функция, содержащая основной цикл, будет по-прежнему довольно большой.
Редактировать: Я задаю общий вопрос о том, является ли это практичным и желательным (с точки зрения чистого кодирования) модульный код внутри цикла, который имеет несколько условий прерывания.
это вопрос для http://codereview.stackexchange.com/ –
Параметр 'continue' является ненужный (и неправильно отступ).Инвертирование теста на 'cellHasUnit' упростит цикл. –
В качестве альтернативы кодосмотру, рассмотрите programers.stackexchange. –