Всегда думал, что while используют настоящие мужчины. Но сегодня написал код, которому сам даже не обрадовался. Критерий оценки: нужно приложить усилия, чтобы понять, что по чём.
while (nextLeaseEnd < _finishedRollOverYear)
{
_mtm += _squareFeet.Value;
nextLeaseEnd = nextLeaseEnd.AddMonths(_category.MonthsToNextLeaseEnd);
}
Конечно же меня такой код не устроил. И я начал биться за ясность.
Во время битвы я понял, что мне не нравиться. А не нравилоась совмещение наращивание аргумента и бизнес-логики.
DateTime nextLeaseEnd = _tenant.LeaseEnd.Value;
DateTime end = _startRollOverDate.Value;
int delta = _category.MonthsToNextLeaseEnd;
for(; nextLeaseEnd < end; nextLeaseEnd = nextLeaseEnd.AddMonths(delta))
{
_mtm += _squareFeet.Value;
}
Фактически я ввёл ненавистные мне временные переменные.
Но получил 2 разных куска кода с разными намерениями.
Первый - инициализация и границы перебора.
Второй - бизнес-логика.
Ваше предложение?
среда, 10 октября 2007 г.
for VS while
на 19:32
Ярлыки: Refactoring
Подписаться на:
Комментарии к сообщению (Atom)
Я думаю что цикл While не всегда является удачной идей и по возможности его просто не испольную по причинам:
ОтветитьУдалить-возможно зацикливание
Ну правда а почему и нет.
-ручное управление итератором
Так что думаю в этом случае предпочтение надо отдать for циклу. Все понятно, кто куда и откуда. И ничего плохого против внутренних переменных я не имею. Главное что бы они не были глобальными :)
Т.к. for( ; m > 0; ) и while( m > 0) эквивалентны - не вижу смысла вообще поддерживать 2 идентичные структуры.
ОтветитьУдалитьВсегда использую for как более функциональный.
ИМХО, Стандартизация есть суть хороший стиль.