Имя пользователя:

Пароль:


Список форумов КАНАДА Работа Программирование и IT Просмотров: 211 Промотать вниз к быстрому ответу

Элегантное программирование: Не дублируйте код в циклах


Давим клаву за бабло
   Поделиться темой: 
  #1
Сообщение 29 дек 2013, 12:23
Ursego Аватара пользователя
СОЗДАТЕЛЬ ТЕМЫ
Canada, Ontario
Город: Toronto
Стаж: 4 года 3 месяца 11 дней
Постов: 9087
Лайкнули: 2618 раз
Карма: 29%
СССР: Днепропетровск
Пол: М
Лучше обращаться на: ты
Заход: 9 часов 25 мин назад

Не дублируйте код в циклах

Не присваивайте значение переменной, контролирующей цикл, дважды (перед циклом и внутри него). В большинстве случаев достаточно сделать это только один раз - внутри тела цикла.

Вы, наверно, спросите - почему? Ведь это дублирование можно найти почти в любой книге по программированию! Мой "неофициальный" ответ прост: зачем писать дважды то, что для достижения той-же цели может быть написано один раз? Ну, а "официальный" ответ вам и так известен: избегайте любое дублирование кода.

*** Не рекомендуется: ***

PB:
long ll_row = 0

ll_row = dw_cust.GetNextModified(ll_row, Primary!)
do while ll_row > 0
   [do something with the modified row]
   ll_row = dw_cust.GetNextModified(ll_row, Primary!)
loop

PL/SQL:
FETCH emp_cursor INTO v_row;
WHILE emp_cursor%FOUND LOOP
   [do something]
   FETCH emp_cursor INTO v_row; -- deja vu! :-)
END LOOP;

Бесконечный цикл (while (1=1), for(;;), do while true и т.п.) с break (или exit when, специфичным для PL/SQL) - самое элегантное решение в этой ситуации::

*** Рекомендуется: ***

PB:
long ll_row = 0

do while true
   ll_row = dw_cust.GetNextModified(ll_row, Primary!)
   if ll_row < 1 then exit
   [do something with the modified row]
loop

PL/SQL:
LOOP
   FETCH emp_cursor INTO v_row;
   EXIT WHEN emp_cursor%NOTFOUND; -- or "IF emp_cursor%NOTFOUND THEN BREAK;"
   [do something]
END LOOP;


Чтобы ответить в этой теме, зарегистрируйтесь или быстро войдите через соцсеть: