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

Вниз

Отношение к использованию 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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.051 c
14-1084776900
Vlad Oshin
2004-05-17 10:55
2004.06.06
http://www.exler.ru/novels/wife.htm ;)


3-1084783566
din
2004-05-17 12:46
2004.06.06
Помогите с запросом


14-1084973432
slaga
2004-05-19 17:30
2004.06.06
как узнать какие значения принемает кнопка на клавиатуре ?


1-1085584624
новичок_из_сыктывкара
2004-05-26 19:17
2004.06.06
Random


4-1082481829
JurMax
2004-04-20 21:23
2004.06.06
Компоненты, позволяющие грузить векторное изображение