Re[4]: Где собака зарыта???
От: Кодт Россия  
Дата: 22.10.04 10:04
Оценка:
Здравствуйте, Евгений Коробко, Вы писали:

ЕК>Да вы что! Это же замечательная вещь. Можно работать с неименованной переменной без копирования в локальную переменную. Это и быстро (х.з. сможет компилятор ли соптимизировать лишее копирование), и красиво — не загромождаем код лишними переменными.


А вот нефиг копировать. Заводишь именованную ссылку на временный объект и наслаждаешься.
for(Query& q = conn.execute("select * from table"); !q.eof(); q.next())
{
  ...
}

Заметьте, цикл for — с выделенными предикатом проверки и выражением итерирования. А не while, где это итерирование засунуто бог весть куда (что, кстати, не только читаемость ухудшает, но и даёт возможность для ошибок)
// сравните
for(init(); cond(); next())
{
  work1();
  if(x()) continue;
  if(y()) continue;
  work2();
}

// с неправильным
init();
while(cond())
{
  work1();
  if(x()) continue;
  if(y()) continue;
  work2();
  next();
}

// и правильным, но громоздким (лишний код)
init();
while(cond())
{
  work1();
  if(x()) { next(); continue; }
  if(y()) { next(); continue; }
  work2();
  next();
}
// или ещё более громозким (лишняя переменная, лишний текст)
init();
bool secondary=false;
while(true)
{
  if(secondary) next(); else secondary=true;
  if(!cond()) break;

  work1();
  if(x()) continue;
  if(y()) continue;
  work2();
}

На паскале специально не написал — синтаксис более громоздкий. Но идея и так видна.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.