powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Улучшение оператора with: голосование и обсуждения
25 сообщений из 100, страница 3 из 4
Улучшение оператора with: голосование и обсуждения
    #39989619
Хочу познать этот дзен, почему with не нужен. От сей опытного человека, который так сильно об него обжёгся и весь код пошёл по ступенькам с небес в ад.
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989629
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
Хочу познать этот дзен, почему with не нужен.
Врятли поймёшь...
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989630
white_nigger,

То есть проблема в самом программисте, а не в конструкции. Если данная конструкция вложена в процедуру события какого - либо объекта, и надо в конструкции обратится к переменной класса. Я ведь просто напишу Self. и мне выдаст функции\переменные текущего класса, самого события.

А по умолчанию, все функции\переменные принадлежат объекту верхнего уровня, вложенного в with


И генерируемый код ассемблера мало чем отличается по итогу, если бы я изначально приписывал к каждой функции \ переменной нужный мне объект, вложенного в with
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989693
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я давно уже за идею
Код: pascal
1.
2.
with some.long.object as ob do
  ob.field := ...
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989761
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Одно из предложений было оформлять алиасы с помощью ключевого слова "as"
Идея, в принципе хороша, но не с такой реализацией. Пример
Код: pascal
1.
with Sender as TButton do


ну и придется запретить with без алиасов. Иначе все бессмысленно
Dimitry Sibiryakov
Все проблемы с With решаются игнорированием правил старика Вирта и выдачей ошибки (или хотя бы предупреждения) если идентификатор в коде ресольвится более чем в один объект
Обеими руками за именно такую реализацию. Причем именно за ошибку, а не предупреждение. Выдает же компилятор ошибку, когда в двух модулях объявлены две overload функции с одним прототипом. И код переписывать нужно по минимуму и основная проблема with уйдет (еще бы они дебаггер допилили).

Более того, может быть такое поведение стоит расширить на любое пересечение идентификаторов в текущей зоне видимости. Но это уже может быть больно.

А вообще, как здесь правильно заметили, с инлайновыми переменными with вообще бессмыслен
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989768
_Vasilisk_,

Эмм. Мне кажется Сэр, вы используете with совершенно не по назначению, и не понимаете его суть.
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989770
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
ну и придется запретить with без алиасов. Иначе все бессмысленно
и сломать обратную совместимость?
имхо, оно того не стоит.
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989772
_Vasilisk_,

В таком исполнение - конструкция, как и задумывалась - идеальна!. Ибо все свойства \ функции доступны верхнего объекта Sender as TButton

Код: pascal
1.
2.
3.
4.
5.
6.
7.
  with Sender as TButton do
  begin
    Caption := 'Text';
    Left := 34;
    Top := 46;
    Font.Size := 10;
  end;



Высшим приоритетом! А все остальные уже поданные.

И такую конструкцию на инлайн не променяешь.
Потому что вы сами должны понимать, что придётся создавать переменную, и прописывать её ручками к каждому свойству.
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989778
Uridian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так уже работает
Код: pascal
1.
with (Sender as TButton) do
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989779
Uridian,

Оно и без скобок работает.
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989780
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
with TForm.Create(nil) as X do begin
  Button1 := TButton.Create(X);
  Button.Parent := X;
  ShowModal;
  Free;
end;
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989790
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный,

Г-споди, какой хернёй вы страдаете. Почему вы не пишете на сразу php, зачем вообще нужен этот изврат?
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989792
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
Хочу познать этот дзен, почему with не нужен.

Потому что нужны более удобные инструменты, чем копипаста с with.
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989801
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
DimaBr, Это не имеет практичности на жизнь.

Жизнь, она у всех разная. Не нужно по своей жизни судить всех остальных.
Лично мне, порой не хватает конструкции AS (или подобной)
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989808
DimaBr,

Если ты хотел сделать

Код: pascal
1.
with var X := TForm.Create(nil) do begin



То сделай это хотя бы так
Код: pascal
1.
2.
var X := TForm.Create(nil)
with X do begin



Но странно, что это не работает как первый вариант.
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989811
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
_Vasilisk_ну и придется запретить with без алиасов. Иначе все бессмысленно
и сломать обратную совместимость?Хотя бы warning добавить
ВсеРазумный
Высшим приоритетом! А все остальные уже поданные.
Угу. Все просто замечательно, пока в объекте не появится новое свойство, которого не было в предыдущих версиях. Угадай, что сделает этот код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TForm1.Button1Click(Sender: TObject);
var
  R: TRect;
begin
  with R do begin
    Left := 100;
    Right := 200;
    Width := Right - Left;
  end;
end;


ВсеРазумный
Потому что вы сами должны понимать, что придётся создавать переменную, и прописывать её ручками к каждому свойству.
И это замечательно
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989812
Fr0sT-Brutal,

Извращенци.

Код: pascal
1.
2.
with var ob = some.long.object do
  ob.field := ...



К тому же,всю логику with убиваете! По рукам вам за такое.
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989814
_Vasilisk_,

Сказочники.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Unit2.pas.31: Left := 100;
0060DED0 C745E864000000   mov [ebp-$18],$00000064
Unit2.pas.32: Right := 200;
0060DED7 C745F0C8000000   mov [ebp-$10],$000000c8
Unit2.pas.33: Width := Right - Left;
0060DEDE 8B55F0           mov edx,[ebp-$10]
0060DEE1 2B55E8           sub edx,[ebp-$18]
0060DEE4 8D45E8           lea eax,[ebp-$18]
0060DEE7 E89850E0FF       call TRect.SetWidth
Unit2.pas.35: end;
0060DEEC 8BE5             mov esp,ebp
0060DEEE 5D               pop ebp
0060DEEF C3               ret 



И ASM с обычным присвоением без with

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Unit2.pas.30: R.Left := 100;
0060DED0 C745E864000000   mov [ebp-$18],$00000064
Unit2.pas.31: R.Right := 200;
0060DED7 C745F0C8000000   mov [ebp-$10],$000000c8
Unit2.pas.32: R.Width := R.Right - R.Left;
0060DEDE 8B55F0           mov edx,[ebp-$10]
0060DEE1 2B55E8           sub edx,[ebp-$18]
0060DEE4 8D45E8           lea eax,[ebp-$18]
0060DEE7 E89850E0FF       call TRect.SetWidth
Unit2.pas.33: end;
0060DEEC 8BE5             mov esp,ebp
0060DEEE 5D               pop ebp
0060DEEF C3               ret 




Сделает тоже самое. Не надо тут ЛяЛя ТраПоля На коне мы катались.
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989815
_Vasilisk_
И это замечательно


Отстаньте от оператора with если не понимаете его логику.

Вам Дай Атомную Электростанцию, вы на ней будете мороженное выпускать!
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989822
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный

Код: pascal
1.
0060DEE7 E89850E0FF       call TRect.SetWidth


Сделает тоже самое.

То же самое ?
А подразумевалось установить ширину формы!
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989823
DimaBr,

Я СКОЛЬКО РАЗ ПИСАЛ!!! Вы чё, совсем без мозгов что ли?

Смысл WITH в том, что в приоритете функции и свойства установленного объекта в WITH


ОН РАБОТАЕТ КАК И ДОЛЖЕН. ЖОПА ОТ ВАС ГОРИТ, ТАКИХ ПРОФЕССИОНАЛОВ DELPHI
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989825
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
DimaBr,
Я СКОЛЬКО РАЗ ПИСАЛ!!! Вы чё, совсем без мозгов что ли?
Смысл WITH в том, что в приоритете функции и свойства установленного объекта в WITH
ОН РАБОТАЕТ КАК И ДОЛЖЕН. ЖОПА ОТ ВАС ГОРИТ, ТАКИХ ПРОФЕССИОНАЛОВ DELPHI

Все прекрасно знают как он работает, просто вы даже не читаете текст
Все просто замечательно, пока в объекте не появится новое свойство, которого не было в предыдущих версиях
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989828
DimaBr,

А причём тут with ?! Если в старых версиях Delphi разрабы ложанулись, и не сделали функционал TRect А в будущем допилили до идеала.
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989829
DimaBr,

Тем более я писал, если вы хотите из with обращаться к функциям формы и свойствам.

Нужно использовать self. в with Ибо with отвечает только за установленный объект в with
...
Рейтинг: 0 / 0
Улучшение оператора with: голосование и обсуждения
    #39989839
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смешней наоборот, когда из TRect Width выпилят или переименуют.

Вот тогда реально хохма внутри with происходит.
...
Рейтинг: 0 / 0
25 сообщений из 100, страница 3 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Улучшение оператора with: голосование и обсуждения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]