Форум: "Потрепаться";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
ВнизОтношение к использованию with. Найти похожие ветки
← →
MVova © (2004-05-21 11:04) [0]Интересует ваше мнение к использованию with ... do.
Я лично использую только в одном случае:
with TStringList.Create do
try
.....
finally
Free
end;
И то только как временные вставки, когда надо в текстовый файл что-то записать. В рабочем варианте и того нет.
И еще вопрос.
Дает ли использование with какую-то пользу для кода, в смысле оптимизации компилятором?
← →
PVOzerski © (2004-05-21 11:05) [1]Отлаживать с ним неудобно. Выигрыша в скорости тоже не замечал.
← →
Игорь Шевченко © (2004-05-21 11:13) [2]
> Дает ли использование with какую-то пользу для кода, в смысле
> оптимизации компилятором?
Дает.
← →
Johnmen © (2004-05-21 11:20) [3]>Дает ли использование with какую-то пользу для кода, в смысле
>оптимизации компилятором?
Дает. Выигрыш в скорости можно не заметить...:)
← →
Vit@ly © (2004-05-21 11:20) [4]With Datamodule1 do
и т.п.
достаточно удобно?
← →
Algol (2004-05-21 11:50) [5]На королевстве есть обсуждение по этому вопросу http://www.delphikingdom.com/asp/talktopic.asp?ID=327
← →
Паниковский © (2004-05-21 12:19) [6]Дает возможность работать с интерфейсом и при смене названия
или обьекта класса с подобным интерфейсом нне так много надо
переписывать.
← →
DiamondShark © (2004-05-21 12:31) [7]
> Отлаживать с ним неудобно
Вы всё ещё отлаживаете? Тогда мы летим к вам!
> Дает ли использование with какую-то пользу для кода, в смысле
> оптимизации компилятором?
Тупой пример:
with MyControl.Font do
begin
Style := [fsBold];
Name := "Times New Roman";
Size := 20;
end;
Если для чтения свойства используется не поле, а метод, то без with было бы три вызова метода чтения.
← →
Гаврила © (2004-05-21 12:31) [8]Не люблю, почти не использую
Читаемость кода снижается, отладка затрудняется, вероятность ошибки увеличивается.
Правил как-то раз чужую программу, увидел там такое
with Item1, Item2, Item3, Item4, Item4, Item5, Item7 do
.... // далее блок на 3 экрана
C трудом поборол желание набить морду
← →
panov © (2004-05-21 12:33) [9]Если для чтения свойства используется не поле, а метод, то без with было бы три вызова метода чтения.
С лихвой окупается избежанием многочисленных ошибок, связанных с With
← →
Empleado © (2004-05-21 13:53) [10]Часто использую так:
with DataModule, Dataset do
...
порой очень удобно.
Gracias
← →
Игорь Шевченко © (2004-05-21 14:01) [11]panov © (21.05.04 12:33)
Гаврила © (21.05.04 12:31)
Всякий овощ приносит пользу будучи использованным надлежащим образов в надлежащее время.
← →
default © (2004-05-21 14:05) [12]а мне в with-е не нравится то что всплывающей подсказкой нельзя пользоваться
← →
Романов Р.В. © (2004-05-21 14:08) [13]В основном в виде
with TSomeThing.Create do
try
DoSomeThing;
finally
Free;
end;
← →
Игорь Шевченко © (2004-05-21 14:14) [14]Всем утверждающим, что with является источником ошибок в программе, могу посоветовать посмотреть исходные тексты VCL и поискать там слово with, где и как оно используется.
← →
Johnmen © (2004-05-21 14:20) [15]>Игорь Шевченко © (21.05.04 14:01) [11]
:)))
Полностью согласен...
← →
Agent13 © (2004-05-21 14:25) [16]with использую с удовольствием и с удобством везде, где нужно. За единственным исключением - если написал без него, а потом пришлось модифицировать код и оказалось, что with бы не помешал, чаще всего уже не дописываю, оставляю как есть :)
← →
vuk © (2004-05-21 14:38) [17]Кстати, я уже на Королевстве этот вопрос задавал противникам with. Вам неявный self в методах не мешает? :o)
Кстати, об использовании with...
Как вам такое? :o)
with Iterator([Button1, Button2, Button3, Edit1, Panel2]) do
while not IsDone do
begin
TControl(Current).Enabled := false;
Next;
end;
← →
euru © (2004-05-21 14:48) [18]>Игорь Шевченко © (21.05.04 14:01) [11]
Согласен.
Всем противникам использования в программе with предлагаю перед идентификаторами в обязательном порядке указывать имя модуля, где они были объявлены.
← →
Dmitriy O. © (2004-05-21 14:53) [19]НУ вот with не стоит GOTO отстой. Скоро воще только один IF останется.
← →
panov © (2004-05-21 15:08) [20]>Игорь Шевченко © (21.05.04 14:14) [14]
Всем утверждающим, что with является источником ошибок в программе, могу посоветовать посмотреть исходные тексты VCL и поискать там слово with, где и как оно используется.
Посмотрел, ничего особенного не увидел.
Предлагаю найти отличие в коде:
function TRegGroups.GetClass(const AClassName: string): TPersistentClass;
var
I: Integer;
begin
Result := nil;
for I := 0 to FGroups.Count - 1 do
with TRegGroup(FGroups[I]) do
begin
if Active then Result := GetClass(AClassName);
if Result <> nil then Exit;
end;
end;
</>
и
function TRegGroups.GetClass(const AClassName: string): TPersistentClass;
var
I: Integer;
begin
Result := nil;
for I := 0 to FGroups.Count - 1 do
with TRegGroup(FGroups[I]) do
begin
if FActive then Result := GetClass(AClassName);
if Result <> nil then Exit;
end;
end;
With можно использовать для самых простейших конструкций (Романов Р.В. © (21.05.04 14:08) [13])
В более сложных случаях чтение кода и отладку можно превратить в кошмар.
← →
Song (2004-05-21 15:09) [21]Любимая штука!
У меня With"ов в программе больше чем begin"ов и end"ов :)
В основном из-за лени.
Чем писать ShowMessage(ListBox1.Items[ListBox1.ItemIndex]);
я напишу With ListBox1 Do ShowMessage(Items[ItemIndex]); что короче, быстрей и красивей.
← →
Игорь Шевченко © (2004-05-21 15:13) [22]
> Предлагаю найти отличие в коде:
> if Active then Result := GetClass(AClassName);
> if FActive then Result := GetClass(AClassName);
И что ?
> With можно использовать для самых простейших конструкций
>
Еще раз - смотреть VCL до полного просветления.
← →
Song © (2004-05-21 15:13) [23]Мда.. анкетка-то слетела
← →
Тимохов © (2004-05-21 15:14) [24]я перестал использовать with года три назад.
пока не жалею.
← →
Song © (2004-05-21 15:14) [25]>>В более сложных случаях чтение кода и отладку можно превратить в кошмар.
ИМХО неправда. Это только для нетренированных :)
← →
Anatoly Podgoretsky © (2004-05-21 15:14) [26]panov © (21.05.04 15:08) [20]
В букве F
В этои и проблема наверно.
← →
Игорь Шевченко © (2004-05-21 15:16) [27]Тимохов © (21.05.04 15:14)
> я перестал использовать with года три назад.
> пока не жалею.
Марксизм не догма, а руководство к действию. Не жалко пальцев и читателей кода - можно и with не использовать. Еще раз про овощ.
← →
Song © (2004-05-21 15:19) [28]Причём у меня даже до смешного доходит :)
Когда нужно написать
Font.Color:=ClRed;
Font.Style:=[fsBold];
я напишуWith Font Do
Begin
Color:=ClRed;
Style:=[fsBold;]
End; {With}
Хотя получается на 2 строчки больше. Просто уже привычка :)
← →
Тимохов © (2004-05-21 15:20) [29]
> Игорь Шевченко © (21.05.04 15:16) [27]
это вопрос религии.
предлагаю не делать выводы про овощи и про удобство читателей.
угодить всем все равно не получится.
зато я (автор) не имею проблем.
разве это не важно?
← →
panov © (2004-05-21 15:28) [30]>Anatoly Podgoretsky © (21.05.04 15:14) [26]
В букве F
Конечно.
>Игорь Шевченко © (21.05.04 15:13) [22]
И что ?
А то, что ошибка при вводе кода в один символ может привести к непонятной ошибке, которую будешь искать неизвестно сколько.
Если в наследнике добавлено поле Active, а в родительском классе есть FActive, тут, в случае ошибки, и получаем проблемы, например.
Не вижу особого смысла в использовании with.
Только 2 причины вижу:
1. Самые простые конструкции (или там, где сложнее написать без with) (Романов Р.В. © (21.05.04 14:08) [13] и
(FList - TThreadList))with FList.LockList do
try
for I := 0 to Count - 1 do
IInterface(List[I]) := nil;
Clear;
finally
Self.FList.UnlockList;
end;
2. Природная лень, при которой лень нажать 2 кнопки Copy,Paste (Ctrl-Ins,Shift-Ins).
Пример совершенно нечитабельного кода привел vuk © (21.05.04 14:38) [17]
with Iterator([Button1, Button2, Button3, Edit1, Panel2]) do
while not IsDone do
begin
TControl(Current).Enabled := false;
Next;
end;
← →
Тимохов © (2004-05-21 15:30) [31]
> panov © (21.05.04 15:28) [30]
приятно, что я не одинок - есть люди, отказавшиеся от with :)))))
← →
vuk © (2004-05-21 15:30) [32]to panov © (21.05.04 15:28) [30]:
>Пример совершенно нечитабельного кода привел vuk © (21.05.04
>14:38) [17]
Хм... А это кому как. :o)
← →
panov © (2004-05-21 15:35) [33]>vuk © (21.05.04 15:30) [32]
Думаю, что это из-за того, что нет контекста.
with Iterator([Button1, Button2, Button3, Edit1, Panel2]) do
while not IsDone do
begin
TControl(Current).Enabled := false;
Next;
end;
Что есть Next ? Метод класса или метод Iterator?
Что есть TControl(Current)?
Без with все было бы понятнее.
← →
Johnmen © (2004-05-21 15:38) [34]>приятно, что я не одинок - есть люди, отказавшиеся от with :)))))
Приятно, что и разумные почитатели with не одиноки - с ними в компании разработчики собственно инструмента.
← →
Anatoly Podgoretsky © (2004-05-21 15:39) [35]panov © (21.05.04 15:28) [30]
Не только добавление, но и переиманование, может даже еще опаснее, поскольку глядя на текст, который работал и не сообразишь. Но есть места где использование with не только оправдано, но и целесобразно, например создание анонимных объектов, или такие места где ошибка маловероятна, например если одна строка [21].
В общем это дело овощей, каждый должен сам решить.
← →
Игорь Шевченко © (2004-05-21 15:39) [36]Тимохов © (21.05.04 15:20)
> это вопрос религии.
Вот я и предлагаю не переводить использование той или иной конструкции в вопросы религии. Для меня одним из образцов служат исходные коды VCL (чего и всем рекомендую)
← →
vuk © (2004-05-21 15:40) [37]to panov © (21.05.04 15:35) [33]
>Без with все было бы понятнее.
Это дело привычки. Но без with было бы длинеее:
var
I: IIterator;
...
i := Iterator([Button1, Button2, Button3, Edit1, Panel2]);
while not i.IsDone do
begin
TControl(i.Current).Enabled := false;
i.Next;
end;
...
← →
panov © (2004-05-21 15:40) [38]>Johnmen © (21.05.04 15:38) [34]
Ты почитатель?
Тогда приведи аргументы в пользу использования with?
← →
Anatoly Podgoretsky © (2004-05-21 15:41) [39]Игорь Шевченко © (21.05.04 15:39) [36]
При том в который раз.
← →
panov © (2004-05-21 15:42) [40]>Anatoly Podgoretsky © (21.05.04 15:39) [35]
Абсолютно согласен.
with TMyClass.Create do
begin
try
...
finally
Free;
end;
end;
Страницы: 1 2 3 4 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.034 c