Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
14-1085145040
Geimer's
2004-05-21 17:10
2004.06.06
На чем лучше писать 3D игры на Ms visual c ,на с++ или на Delphi


14-1084937250
тихий вовочка
2004-05-19 07:27
2004.06.06
каламбурчик


4-1083689831
Defunct
2004-05-04 20:57
2004.06.06
Как определить номер потока?


14-1084783479
Искать и не сдаваться
2004-05-17 12:44
2004.06.06
Одна песенка из фабрики-4.


14-1084878126
Карелин Артем
2004-05-18 15:02
2004.06.06
Только крутым программерам!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский