Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.03.25;
Скачать: CL | DM;

Вниз

Указатели   Найти похожие ветки 

 
aka ©   (2016-04-07 10:13) [0]

Пришлось править чужой исходник.
Кратко суть проблемы
Next := First;
while Next <> Last do begin
 {143 строки кода разных действий с Next}
 Next := Next.Child[DLeft]
end;

Last - тут естественно под while не попадает (в этом и был скрытый баг)

получается что нужно брать Last и дописывать для него отдельно после while все то что было в теле цикла для Next.


 
Ринсвинд ©   (2016-04-07 11:55) [1]

Next := First;
while true do begin
{143 строки кода разных действий с Next}
if Next = Last then
 break;
Next := Next.Child[DLeft]
end;


 
Ринсвинд ©   (2016-04-07 12:00) [2]

Разумеется, при условии что Next не присваивается новый объект в тех 143 строчках кода.


 
Игорь Шевченко ©   (2016-04-07 13:43) [3]

repeat...until


 
han_malign ©   (2016-04-07 15:43) [4]


> получается что нужно брать Last и дописывать для него отдельно

- почувствуй силу декомпозиции, Люк...
Next := First;
while Next <> Last do begin
  process(Next);
  Next := Next.Child[DLeft]
end;
process(Last);


 
Германн ©   (2016-04-08 01:46) [5]


> han_malign ©   (07.04.16 15:43) [4]
>
>
> > получается что нужно брать Last и дописывать для него
> отдельно
>
> - почувствуй силу декомпозиции, Люк...

Это шутка такая что ли?


 
sniknik ©   (2016-04-08 08:46) [6]

> Это шутка такая что ли?
?
загнать в процедуру 143 строчки кода, и вызвать ее 2 раза? нет не шутка. нормальное решение.

хотя я бы сделал так, при условии что Last.Child[DLeft] возвращает nil, а оно вроде так и делается в указателях/списках из них, "концевики" инициализируются nil-ом.
тогда очевидно, и без лишних условий/процедур.

Next := First;
while Assigned(Next) do begin
{143 строки кода разных действий с Next}
Next := Next.Child[DLeft]
end;


и да, First на пустой структуре тоже nil должен возвращать.


 
han_malign ©   (2016-04-08 16:08) [7]


> Это шутка такая что ли?

- а еще лучше
process(Next.value);
- чтобы гарантировать семантическую изоляцию работы с данными от реализации контейнера...
и тогда коментарий будет выглядеть:
{пофиг сколько там строк кода, т.к манипуляций с Next не происходит}



Страницы: 1 вся ветка

Текущий архив: 2018.03.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.006 c
6-1220778660
Lamer666
2008-09-07 13:11
2018.03.25
Подскажите как отправить письмо используя сокеты?


2-1460013191
aka
2016-04-07 10:13
2018.03.25
Указатели


15-1471469402
Юрий
2016-08-18 00:30
2018.03.25
С днем рождения ! 18 августа 2016 четверг


2-1459514237
Макака
2016-04-01 15:37
2018.03.25
Подсветка кода


2-1459952023
eh
2016-04-06 17:13
2018.03.25
Сообщение WM_DeviceChange