среда, 10 октября 2007 г.

for VS while

Всегда думал, что 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 разных куска кода с разными намерениями.
Первый - инициализация и границы перебора.
Второй - бизнес-логика.

Ваше предложение?

2 комментария:

  1. Я думаю что цикл While не всегда является удачной идей и по возможности его просто не испольную по причинам:
    -возможно зацикливание
    Ну правда а почему и нет.
    -ручное управление итератором

    Так что думаю в этом случае предпочтение надо отдать for циклу. Все понятно, кто куда и откуда. И ничего плохого против внутренних переменных я не имею. Главное что бы они не были глобальными :)

    ОтветитьУдалить
  2. Т.к. for( ; m > 0; ) и while( m > 0) эквивалентны - не вижу смысла вообще поддерживать 2 идентичные структуры.
    Всегда использую for как более функциональный.
    ИМХО, Стандартизация есть суть хороший стиль.

    ОтветитьУдалить