Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];

Вниз

Оптимизируйте конструкцию   Найти похожие ветки 

 
Сатир   (2002-11-08 20:17) [0]

if fBase<>nil then fBase.fChilds.Remove(Self);
fBase := Value;
if fBase<>nil then fBase.fChilds.Add(Self);
UpdateColors(0);


 
TTCustomDelphiMaster   (2002-11-08 20:59) [1]

По каким параметрам: скорость, размер.

В приципе нормальная конструкция.


 
Сатир   (2002-11-08 21:28) [2]

просто смущает дважды повторение одного и того же условия;(


 
TTCustomDelphiMaster   (2002-11-08 21:53) [3]

Условия похожие, но объекты то разные. Так что все правильно.


 
Di_wind   (2002-11-08 21:55) [4]

Объекты одинаковые, разные методы ;)


 
down   (2002-11-08 22:06) [5]

<>nil можно заменить на Assigned, будет чуть красивей


 
Моджахед   (2002-11-08 22:44) [6]

Оптимизировать только потому, что повторяется 2 раза условие? Тогда решай, что важнее -- ясность кода или мифическая (в мили-мили-мили секундах) разница.
Если скорость выполнения, то можно так:

If Value = nil then Exit;
If fBase <> nil then with fBase do
begin
fChilds.Remove(Self);
fBase := Value;
fChilds.Add(Self);
end;
UpdateColors(0);


Сразу же отсекаются дальнейшие проверки в случае если Value=nil. Уже плюс. Также тебе уже не мучает повторяющееся условии. Ну и еще пара плюсов в скорости.
Но читать труднее. Решай сам.


 
Моджахед   (2002-11-08 22:47) [7]

И вообще, мне кажетя (я не видел основного кода компонента и не могу с точностью восстановить логику), так вот, мне кажется, что когда появляется необходимость в такого рода кривоватых имплементациях обновления свойства, то, значит, логика компонента построена непродуманно.
Уж простите.


 
Anatoly Podgoretsky   (2002-11-08 22:55) [8]

Моджахед (08.11.02 22:44)
Все красиво, вот только не правильно работает, не в соответствии с логикой.

Сатир © (08.11.02 20:17)
Конструкция уже потимизирована.


 
Моджахед   (2002-11-09 00:14) [9]

Anatoly Podgoretsky © (08.11.02 22:55)
Я полагаю, что я правильно распутал логику приведеного кода. Плюс предположительную логику всего остального.
Если вам будет интересен спор (а мне да) то мы можем аргументрированно поспорить.


 
Ученик   (2002-11-09 00:24) [10]

{ DB.PAS}

procedure TDataSource.SetDataSet(ADataSet: TDataSet);
begin
if IsLinkedTo(ADataSet) then DatabaseError(SCircularDataLink, Self);
if FDataSet <> nil then FDataSet.RemoveDataSource(Self);
if ADataSet <> nil then ADataSet.AddDataSource(Self);
end;


 
Моджахед   (2002-11-09 00:31) [11]

2 Ученик © (09.11.02 00:24)

Вот я и говорю (предполагаю) о изьяне в логике вего компонента


 
Alex44   (2002-11-09 02:37) [12]

2 Моджахед

Absolutno nepravil"no!

> If Value = nil then Exit;

Chto, esli fBase <> nil and Value = nil ?


 
Anatoly Podgoretsky   (2002-11-09 11:41) [13]

Моджахед (09.11.02 00:14)
Абсолютно неправильно и получил абсодютно неверный результат.
Предмета для спора нет, могу только урок ппровести.
fChilds не описано, но это что типа списка или подобное.
Алгоритм

1. если старое значение не равно нулю, то убрать из списка,
у тебя даже до этой стадии не доходит если новое уже нуль

2. заменить старое значение новым, см п.1.

3. если новое значение не нуль, то добавить в списек
у тебя если старое нуль, то не выполнится пункт 2
и пункт 3 алгоритма

Теперь мы видим, что минимально два сравнения, одно со старим значение поля и одно для нового значения поля и одно обязательное присваивание.

Единственно что возможно необходимо оптимизировать, то это пункт 4, если старое и новое равны, то может стоит не делать UpdateColors(0), но это зависит от задачи и реализации списков и данной процедуры, а также от ее продолжительности.


 
AlexT1000   (2002-11-09 12:17) [14]

Моджахед

стопудово неправильно написано.

Anatoly Podgoretsky дело говорит.

соображать надо больше , а думать меньше


 
Сатир   (2002-11-10 20:14) [15]

да, скорее всего, здесь уже нечего оптимизировать...


 
Fantasist   (2002-11-10 21:03) [16]


if Assigned(fBase) then fBase.fChilds.Remove(Self);
if Assigned(Value) then Value.fChilds.Add(Self);
fBase := Value;
UpdateColors(0);


Можно записать так, чтобы не возникала иллюзия, что один объект проверяется два раза. А оптимизировать ы этом куске нечего.


 
Anatoly Podgoretsky   (2002-11-10 21:14) [17]

В чем состоит твоя оптимизация, кроме смены порядка операторов и некоторого замедления? Ну и конечно не считая того что это более читабельная версия. Конечно если последнее то да, это очень важно = хорошая читабельность залог того что меньше будет ошибок.


 
Fantasist   (2002-11-10 21:17) [18]

Цитирую себя:

"Можно записать так, чтобы не возникала иллюзия, что один объект проверяется два раза. А оптимизировать в этом куске нечего."

Этого достадочно?


 
Anatoly Podgoretsky   (2002-11-10 21:28) [19]

Значит мое предположение было верное.
А с этим я полностью согласен.



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

Форум: "Основная";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.007 c
1-69411
Barmaglot
2002-11-10 19:48
2002.11.21
Как конвертировать строку ?


3-69154
MetalFan
2002-10-31 12:40
2002.11.21
D&D из DBGrid в DBGrid


14-69561
McSimm
2002-10-29 16:57
2002.11.21
логика :)


1-69339
TTCustomDelphiMaster
2002-11-12 18:31
2002.11.21
ActiveX


14-69487
blackweber
2002-11-05 00:50
2002.11.21
GUID





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский