Форум: "Потрепаться";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
ВнизОтношение к использованию with. Найти похожие ветки
← →
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;
← →
Тимохов © (2004-05-21 15:45) [41]
> Игорь Шевченко © (21.05.04 15:39) [36]
отступ 2 вас тоже удовлетворяет?
меня знаете ли нет, мне больше нравится (уже лет 15 как) отступ 3.
всему свое место.
with, допускаю, можно использовать.
мне он просто не нравится - имея его в коде мне сложно поддерживать свои 1мнл чистых строк знаете ли.
:))
← →
Anatoly Podgoretsky © (2004-05-21 15:46) [42]panov © (21.05.04 15:42) [40]
with TMyForm.Create do Show;
TMyForm.Create.Show;
← →
VMcL © (2004-05-21 15:46) [43]Не понимаю, о чем спор. Все мы, люди разные и, естественно, что у нас разные типы интеллекта и типы восприятия.
← →
Johnmen © (2004-05-21 15:48) [44]>panov © (21.05.04 15:40) [38]
>Ты почитатель?
>Тогда приведи аргументы в пользу использования with?
Я разумный использователь, скажем так...:)
А аргументов уже наприводили.
← →
panov © (2004-05-21 15:53) [45]>Игорь Шевченко © (21.05.04 15:39) [36]
Вот я и предлагаю не переводить использование той или иной конструкции в вопросы религии. Для меня одним из образцов служат исходные коды VCL (чего и всем рекомендую)
Это не вопрос религии-)
Пара высказываний по теме топика:
1. With надо использовать только в тех случаях, когда это действительно необходимо
2. With надо использовать в большинстве случаев для написания более понятного, читабельного кода.
← →
Плохиш (2004-05-21 15:57) [46]Весеннее обострение :-)
Скоро лето, всё пройдёт ;-)
← →
Игорь Шевченко © (2004-05-21 15:58) [47]
> Пара высказываний по теме топика:
> 1. With надо использовать только в тех случаях, когда это
> действительно необходимо
Таких случаев нету вообще. Всегда можно заменить конструкцию с использованием with, конструкцией, не использующей этого оператора. Чаще - более громоздкой и нечитабельной, реже - менее громоздкой. Кроме того, как уже было сказано, использование with влияет на быстродействие откомпилированного кода.
← →
Тимохов © (2004-05-21 15:58) [48]
> panov © (21.05.04 15:53) [45]
> Это не вопрос религии-)
Не могу с вами согласится.
Когда держишь большой проект (для одного-двух человек), то нужна именно религия, в которую следует свято верить.
Иначе, концов не соберешь.
Не использовать with для меня вопрос именно религии.
Также как делать отступы, также как параметры начинать с буквы "а", также как private начинать с "f".
← →
panov © (2004-05-21 16:00) [49]Таких случаев нету вообще.
Я думаю, что есть такие случаи. А именно - если код без использования Width становится совершенно нечитабельным, то это веская причина для его использования...
← →
Тимохов © (2004-05-21 16:02) [50]
> Кроме того, как уже было сказано, использование with влияет
> на быстродействие откомпилированного кода.
Был время я просил Анатолия прокомментировать данное утверждение. Он сказал, что это его личное наблюдение.
На чем строится ваше мнение?
Есть ли это в какой-нибудь доке?
← →
Johnmen © (2004-05-21 16:02) [51]>Тимохов © (21.05.04 15:58) [48]
>Не использовать with для меня вопрос именно религии.
"Почём опиум для народа ?" (c) О.Бендер
:)
← →
Anatoly Podgoretsky © (2004-05-21 16:03) [52]panov © (21.05.04 15:53) [45]
пример нерационального использования в Anatoly Podgoretsky © (21.05.04 15:46) [42]
Но конструкция часто встречается
← →
Тимохов © (2004-05-21 16:05) [53]
> Johnmen © (21.05.04 16:02) [51]
Зря смеетесь. :))
Я же объяснил, что я его не люблю, т.к. плохо воспринимаю.
При большом коде иметь плоховоспринимаемую конструкцию думаю не вполне разумно.
ЗЫ. Вот, блин, втянулся в обсуждение не пойми чего. :))
← →
Anatoly Podgoretsky © (2004-05-21 16:06) [54]Тимохов © (21.05.04 16:02) [50]
Я встречал и утверждение об обратном, видимо зависит от ситуации, что мы знаем об внутренней кухне компилятора/оптимизатора, которая не догма и тоже меняется.
Для меня это литеральная подстановка, но это не означает, что это истина, может кое где оптимизатор и делает что то.
Но как правило это не важно, если это не гигантский цикл.
← →
Игорь Шевченко © (2004-05-21 16:08) [55]
> На чем строится ваше мнение?
> Есть ли это в какой-нибудь доке?
View|Debug windows|CPU
> Не использовать with для меня вопрос именно религии.
А смысл ?
Borland, как было отмечено, в момент разработки vcl тоже "держал" немаленький проект, даже свои стандарты к оформлению кода разработал, в том числе и префикс F у полей классов и, иногда, A у параметров и локальных переменных.
← →
DiamondShark © (2004-05-21 16:14) [56]
> Кроме того, как уже было сказано, использование with влияет
> на быстродействие откомпилированного кода.
Больше, чем на быстродействие. На семантику.
← →
Тимохов © (2004-05-21 16:14) [57]
> Borland, как было отмечено, в момент разработки vcl тоже
> "держал" немаленький проект,
у меня больше.... :((( а людей меньше (двое).
← →
Внук © (2004-05-21 16:28) [58]>>приятно, что я не одинок - есть люди, отказавшиеся от with :)))))
Теперь нас трое. Впрочем, я свои вргументы приводил неоднократно, а спорить смысла не вижу.
← →
Тимохов © (2004-05-21 16:33) [59]
> Внук © (21.05.04 16:28) [58]
если ваш цвет считать почти белым, то мы могем составить с Panov российский флаг!
:)))
Ура!!!
← →
Mim1 © (2004-05-21 16:37) [60]А я вот использовал with и никогда об этом не задумывался :). Проблемм с ошибками (изза with) и т.п. не возникает.
PS Щас вспомнилась фраза из КВН "Вам ТАКИМ надо держаться вместе".
← →
App © (2004-05-21 16:50) [61]Панов далеко
← →
nikkie © (2004-05-21 17:02) [62]крамольная мысль: если бы with в паскале был такой же классный, как в VB, то и споров не было б.
← →
Mystic © (2004-05-21 17:09) [63]1. with я использую
2. Код от vuk вполне читабелен
Off: Кстати, недавно наткнулся на такую реализацию итераторов:
with Iterator([Button1, Button2, Button3, Edit1, Panel2]) do
while Next do
TControl(Current).Enabled := false;
(набор расширяется начальным пустым элементом, функция Next возвращает False, если это последний элемент). Удобно, что не надо вызывать метод Next, который редко, но иногда все же пропускается...
← →
euru © (2004-05-21 17:15) [64]>nikkie © (21.05.04 17:02) [62]
Тогда уж, по-моему, лучше был бы такой вариант:
with A.B as x, A as y do begin
x.method();
y.method();
end;
← →
ламер © (2004-05-21 17:28) [65]спорить о том, использовать with или нет - тоже самое, что спорить о том, что лучше - while...do или repeat...until. всё зависит от конкретного случая.
например, так (пример, конечно, надуманный, но всё-таки):
btnOk := TButton.Create(nil);
with btkOk do
begin
Caption := "Ok";
Left := 10;
Top := 10;
Width := 100;
Height := 100;
OnClick := frmMain.OkButtonClick;
end;
> DiamondShark © (21.05.04 12:31) [7]
> with MyControl.Font do
> begin
> Style := [fsBold];
> Name := "Times New Roman";
> Size := 20;
> end;
>
> Если для чтения свойства используется не поле, а метод, то без > with было бы три вызова метода чтения.
неправда. компилятор автоматически произведёт вынос выражения MyControl.Font.
← →
Anatoly Podgoretsky © (2004-05-21 17:37) [66]Ник ламер заняли, но LMD еще свободен, шутники вперед!
← →
Тимохов © (2004-05-21 17:39) [67]похоже Анатолия доставать все начали :)))))
← →
Anatoly Podgoretsky © (2004-05-21 17:41) [68]Тимохов © (21.05.04 17:39) [67]
Меня не в жизнь, я тоже хочу веселиться :-)
← →
Тимохов © (2004-05-21 17:43) [69]
> Anatoly Podgoretsky © (21.05.04 17:41) [68]
Что же останавливаешь, сами же сказали, что ник ЛМД свободен :))
← →
ламер © (2004-05-21 17:45) [70]> Anatoly Podgoretsky © (21.05.04 17:37) [66]
> Ник ламер заняли, но LMD еще свободен, шутники вперед!
а почему, собственно, шутники? ответ был вполне серьёзный.
← →
Gero © (2004-05-21 17:47) [71]Иногда приходится сталкиваться с подобным кодом:
SomeClass.Property_1 := Value_1;
SomeClass.Property_2 := Value_2;
SomeClass.Property_3 := Value_3;
SomeClass.Property_4 := Value_4;
SomeClass.Property_5 := Value_5;
SomeClass.Property_6 := Value_6;
SomeClass.Property_7 := Value_7;
SomeClass.Property_8 := Value_8;
SomeClass.Property_9 := Value_9;
SomeClass.Property_10 := Value_10;
SomeClass.Property_11 := Value_11;
SomeClass.Property_12 := Value_12;
Когда это можно было бы заменить на:
with SomeClass do
begin
Property_1 := Value_1;
Property_2 := Value_2;
Property_3 := Value_3;
Property_4 := Value_4;
Property_5 := Value_5;
Property_6 := Value_6;
Property_7 := Value_7;
Property_8 := Value_8;
Property_9 := Value_9;
Property_10 := Value_10;
Property_11 := Value_11;
Property_12 := Value_12;
end;
Еще скажите, что он не стал более читабельным.
P.S. Могу привести программу, в которой такого (1 вариант) кода - уйма.
AvtoShema называется. :)
← →
Anatoly Podgoretsky © (2004-05-21 17:50) [72]ламер © (21.05.04 17:45) [70]
Несоответсвие ника остальному, принимаю как шутку или отместку некоторым обсуждениям, надеюсь, что не в пику кому либо или как?
← →
Anatoly Podgoretsky © (2004-05-21 17:53) [73]Gero © (21.05.04 17:47) [71]
Конечно нет, читабельный, но не надежный, стоит появитсья у SomeClass полю, свойству или методу с именами Value_х и все, а вот в первом варианте проблемы не будет.
Ведь возражения не столько по читабельности, а с ним тоже иногда проблемы, сколько об надежности.
← →
Mystic © (2004-05-21 17:54) [74]
> Иногда приходится сталкиваться с подобным кодом:
>
> SomeClass.Property_1 := Value_1;
Скорее даже:PaintBox.Canvas.Brush.Color := clBtnFace;
PaintBox.Canvas.FillRect(Rect(0, 0, PaintBox.Width, PaintBox.Height));
// Другие операторы рисования несметным числом
все это обычно заменяется:with PaintBox, PaintBox.Canvas do
begin
Brush.Color := clBtnFace;
FillRect(Rect(0, 0, PaintBox.Width, PaintBox.Height));
// Другие операторы рисования...
end;
← →
vuk © (2004-05-21 17:55) [75]to Mystic © (21.05.04 17:09) [63]:
У меня Next тоже возвращает boolean. Правда есть одно отличие. Решение, наверное, неудачное и я уже не помню почему так сделал, но у меня true возвращается в случае достижения конца набора. А дополнительный элемент в начале списка, если очень хочется, можно добавить при задании набора.
:o)
← →
ламер © (2004-05-21 17:58) [76]> Anatoly Podgoretsky © (21.05.04 17:50) [72]
хм, можно и так сказать.
разумеется, ник взят не из-за кого-то конкретного. просто с другим ником меня рано или поздно обвинят в ламерстве :) а дискуссии здесь грозные :)
← →
Mystic © (2004-05-21 17:59) [77]Имеется в виду, чтобы попасть на первый элемент надо вызвать Next (иначе Current = nil). Основная идея --- заменить цикл вида
while not RS.EOF do
begin
Operator;
RS.MoveNext;
end;
на
while RS.MoveNext do Operator;
Так сделано в Cache", если я не ошибаюсь.
← →
Gero © (2004-05-21 18:04) [78]А вобще глупо спорить о подобных вещах.
Я полностью согласен с [11] Игорь Шевченко © (21.05.04 14:01).
with иногда бывает очень полезен.
Но нужно знать меру, когда лучше с ним, а когда без него.
Возвращаясь к примеру [71] скажу, что возможно я захочу переименовать SomeClass в SomeClass2...
Repace придется. А нафига, если в 2 достаточно изменить только одну строку...
← →
vuk © (2004-05-21 18:10) [79]to Mystic © (21.05.04 17:59) [77]:
Да я все понял. В моем случае такой код тоже можно получить. Только условие будет обратным и начальный элемент будет задан явно:
with Iterator([nil, Button1, Button2, Button3, Edit1, Panel2]) do
while not Next do
TControl(Current).Enabled := false;
← →
kaif © (2004-05-21 18:15) [80]Видимо я редко допускаю ошибки вообще, поэтому никаких кошмаров не припомню, хотя всегда отдавал предпочтение оператору with.
Мои ограничения:
- не использовать под with сразу множество разных объектов типа
with a,b,c
здесь действительно возможны серьезные ошибки.
- стараться не использовать много вложенных with
- не использовать with, если возможны разночтения, но если применение self может спасти от разночтения, предпочитать использовать with и self, чем отказываться от with.
- стараться не использовать with, если имеется два симметричных объекта, одному из которых приходится искусственно отдавать предпочтение для with, например:
with DataSet1 do
begin
First;
while not Eof do
begin
DataSet2.First;
while not DataSet2.Eof do
DataSet2.Next;
end;
Next;
end;
Иногда мне не хватает внутри with кроме идентификатора self еще какого-нибудь идентификатора current, чтобы обратиться не к методу объекта, на который намекает with, а к указателю на сам объект, если, скажем, его нужно бывает чему-то присвоить или засунуть в List, а он не self :(. И вот тут-то и возникает, ИМХО, главная бяка с with.
А в целом with очень даже хорош.
А сделать через Ж можно все. Для некоторых и DataAware контролы чем-то не угодили и чуваки все в Edit-ах руками редактируют. Или, например, вместо того, чтобы написать просто:Query1.SQL.Text := "select * from AAA"
илиQuery1.SQL.Text := "select"#13" *"#13"from"#13" AAA"
или на худой конец:Query1.SQL.Text :=
"select"#13 +
"*"#13+
"from"#13+
" AAA"
пишут обязательно:
Query1.SQL.Clear;
Query1.SQL.Add("select");
Query1.SQL.Add(" *");
Query1.SQL.Add("from");
Query1.SQL.Add(" AAA");
Тоже религия...
Особенно если и здесь with не использовать очень даже читабельный и прикольнй текстик получается...
Страницы: 1 2 3 4 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.034 c