Форум: "Потрепаться";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
ВнизКто-нибудь сможет сходу определить причину ошибки? :) Найти похожие ветки
← →
Anatoly Podgoretsky © (2004-10-05 16:49) [80]Sandman25 © (05.10.04 16:38) [79]
Если с тобой согласиться, то придется делать двойной комплект методов, с параметром и без. Вот тут тебе прогнозирую резкое замедление производительности, на время написания, на время тестирования и навремя поиска потом ошибок в программе.
Механизм с одним методом гарантирует как единообразие, так и отсутствие возможных ошибок, где передали, где нет, а использовать пытались.
Перенос анализа на НИЛ из метода добавления в другие методы, к тому же вызовет заметное замедление работы других частей иерархии.
← →
Игорь Шевченко © (2004-10-05 16:49) [81]Sandman25 © (05.10.04 16:23) [75]
> Я понимаю, что в данном случае следует указывать конкретный
> параметр
И это утверждение неверно :)
> Меня удивляет Ваше нежелание признать, что очень часто лучше
> указывать именно nil.
Зачем ? В своем посте [59] я сказал уже, что все зависит от задачи.
← →
Sandman25 © (2004-10-05 16:54) [82][80] Anatoly Podgoretsky © (05.10.04 16:49)
Мне кажется, что Вы меня не поняли. Я не призываю к overload, я призываю использовать nil в качестве параметра, если параметр не используется.
К тому же, это отлично сочетается с синтаксисом параметров по умолчанию, где для объектов может быть только nil.
[81] Игорь Шевченко © (05.10.04 16:49)
И это утверждение неверно :)
Вы сообщили, что в данном случае у Вас используется параметр, и у меня нет оснований Вам не верить, уж извините :)
Зачем ? В своем посте [59] я сказал уже, что все зависит от задачи.
Правильно. Но по умолчанию следует передавать nil (если все равно, что передавать). Это логично, быстро и понятно другим программистам :)
← →
Anatoly Podgoretsky © (2004-10-05 16:57) [83]В таком случае никакого повышения не наблюдается, без разницы кто передаст параметр, программист или компилятор, параметр все равно передается.
← →
Sandman25 © (2004-10-05 17:03) [84][83] Anatoly Podgoretsky © (05.10.04 16:57)
Тут уже проскакивал код из Create c проверкой на nil и вызовом InsertComponent.
В случае передачи nil InsertComponent не вызовется. Аналогично при удалении.
← →
Игорь Шевченко © (2004-10-05 17:08) [85]
> Правильно. Но по умолчанию следует передавать nil (если
> все равно, что передавать). Это логично, быстро и понятно
> другим программистам :)
Насчет логичности и понятности другим программистам лично я сильно сомневаюсь. Быстрота в данном случае не играет мало-мальски значимой роли.
← →
Sandman25 © (2004-10-05 17:11) [86][85] Игорь Шевченко © (05.10.04 17:08)
Насчет логичности и понятности другим программистам лично я сильно сомневаюсь
Имеете право. Я обычно разбираюсь с новым кодом с помощью метода обхода графа в ширину, а не глубину, и поэтому стараюсь сразу же понять, что передается параметром, то есть нажимаю Ctrl+клик и начинаю изучать эту самую форму. Жаль, конечно, что зря.
← →
Piter © (2004-10-05 23:16) [87]сразу хочу извиниться, что врываюсь тут к вам с оффтопом..
_silver © (05.10.04 1:17) [25]
with ArrayParent[0] - ожидается использование объекта типа TEdit, но ещё не создан.
Поэтому в блоке begin .. end свойство Parent(класса TEdit) неизвестно
НУ БЛИН!
А вwith Edit
разве не ожидается использование объекта TEdit??? Но ведь он то еще не создан и Parent Тоже неизвестно!!!!!!!
А пример то работает.
← →
GuAV © (2004-10-06 01:13) [88]О быстродействии говорить не следует.
см [51]. Эквивалентный код с with и без.
Когда речь идет о with речь идёт об удобстве/неудобстве или о понятности/непонятности кода.
← →
Ihor Osov'yak © (2004-10-06 01:41) [89]2 [43] Piter(Ne doma) (05.10.04 12:13)
> никаких предупреждение компилятор НЕ ПИШЕТ
Да, здесь я был не прав. Иногда случается. В принцыпе, свой постинг я делал чесно - "без делфи". Во вторых - здесь имхо - следовало бы генерить варниг как минимум (я был убежден, что генерится). И - см. ниже.
2 [44] GuAV © (05.10.04 12:30)
>> Зы. странно, что борланды вообще такую конструкцию считают
>> синтастически допустимой...
>О чём это Вы ?
изменение в теле with "подwith-нутой" переменной. Если чесно - я такого бы не написал даже при изрядной степени опьянения. Имхо, это (изменение в теле with "подwith-нутой" переменной) сродни попытки изменения переменой цыкла внутри цыкла. Что из этого может получиться - см. выше.
← →
GuAV © (2004-10-06 01:51) [90]Ihor Osov"yak © (06.10.04 01:41) [89]
Подумал, и вынужден с Вами согласится.
← →
Игорь Шевченко © (2004-10-06 11:26) [91]GuAV © (06.10.04 01:13) [88]
> Когда речь идет о with речь идёт об удобстве/неудобстве
> или о понятности/непонятности кода.
View|Debug windows|CPU
← →
Igorek © (2004-10-06 12:05) [92]> Ihor Osov"yak © (06.10.04 01:41) [89]
> изменение в теле with "подwith-нутой" переменной. Если чесно
> - я такого бы не написал даже при изрядной степени опьянения.
> Имхо, это (изменение в теле with "подwith-нутой" переменной)
> сродни попытки изменения переменой цыкла внутри цыкла.
Точно!
← →
Anatoly Podgoretsky © (2004-10-06 12:16) [93]Piter © (05.10.04 23:16) [87]
У тебя все работает, только изменяется содержимое регистра или временной переменой :-)
← →
GuAV © (2004-10-06 13:00) [94]Игорь Шевченко © (06.10.04 11:26) [91]
procedure With1; // breakpoint here
begin
with Form1.Memo1.Lines do
begin
Add("zzzzzzz");
Add("xxxxxxx");
end;
end;
procedure WithOut1;
var L: TStrings;
begin
L:=Form1.Memo1.Lines; // breakpoint here
L.Add("zzzzzzz");
L.Add("xxxxxxx");
end;
procedure With2;
begin
with TForm.Create(nil) do // breakpoint here
try
color:=clred;
finally
free;
end;
end;
procedure WithOut2;
var F: TForm;
begin
F:=TForm.Create(nil); // breakpoint here
try
F.color:=clred;
finally
F.free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
With1;
WithOut1;
With2;
WithOut2;
end;
В CPU я вижу только отличия которые связаны с тем что процедуры находится по разному смещению, инструкции абсолютно те же.
Страницы: 1 2 3 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
Память: 0.62 MB
Время: 0.039 c