powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / with и без with
25 сообщений из 68, страница 2 из 3
with и без with
    #39915931
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Символ "~" лучше определить как пространство имен окружающее текущий блок, т.е.
Код: sql
1.
2.
3.
4.
5.
with Bmp1,Bmp2 do
begin
  Width:=~Width;
  Height:=~Height;
end;


эквивалентен
Код: sql
1.
2.
Bmp2.Width:=Bmp1.Width;
Bmp2.Height:=Bmp1.Height;


и
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
procedure TForm.SomeProc(ABmp:TBitmap);
begin
  with ABmp do
  begin
    Width:=~Width;
    Height:=~Height;
  end;
end;


приводит битмап к размерам формы.
...
Рейтинг: 0 / 0
with и без with
    #39915936
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трешак.
...
Рейтинг: 0 / 0
with и без with
    #39915938
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
x1ca4064
IMHO, оператор width лучше реализован в VisualBasic : свойства, которые относятся к переменной из with предваряются точкой, сам символ, конечно, не важен, можно заменить на "~", например.
...
но когда используются свойства в методах, это было бы удобно:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
procedure TForm.SomeProc(ABmp:TBitmap);
begin
  with ABmp do
  begin
    ~Width:=Width;
    ~Height:=Height;
  end;
end;



В такой конструкции происходит присвоение битмапу размеров формы.

В таком коротком куске кода необходимости отмечать что-то точкой или любым другим символом нет никакой необходимости. И так всё ясно. А в кусках кода, которые не влезают на один экран оператор wit h лучше не использовать. Даже если код пишется одним автором, а не группой.
...
Рейтинг: 0 / 0
with и без with
    #39915940
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя да. Был не прав не поняв сути предложения.
Но в любом случае я за явное указание:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure TForm.SomeProc(ABmp:TBitmap);
begin
  with ABmp do
  begin
    Width:=Self.Width;
    Height:=Self.Height;
  end;
end;
...
Рейтинг: 0 / 0
with и без with
    #39915949
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
northener,

Код: pascal
1.
2.
ABmp.Width:=Self.Width;
ABmp.Height:=Self.Height;


И короче и надежней.
...
Рейтинг: 0 / 0
with и без with
    #39915958
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
northener,

Код: pascal
1.
2.
ABmp.Width:=Self.Width;
ABmp.Height:=Self.Height;


И короче и надежней.


По ощущениям: бывают ситуации, когда с with получается наглядней, поскольку производится оформление в виде блока с соответствующим отступом, например:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with ds.FieldByName('PRICE') do
begin
  Visible := True;
  Width := 100;
  DisblayLabel := 'Цена';
end;

with ds.FieldByName('OSTATOK') do
begin
  Visible := True;
  Width := 100;
  DisblayLabel := 'Остаток';
end;

with ds.FieldByName('NAME') do
begin
  Visible := True;
  Width := 200;
  DisblayLabel := 'Наименование';
end;
...
Рейтинг: 0 / 0
with и без with
    #39915959
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Умеет кто-нибудь искать задачи на https://quality.embarcadero.com/, касающиеся улучшения работы оператора "with"? Такое ощущение, что движок поиска удаляет это слово :(
...
Рейтинг: 0 / 0
with и без with
    #39915968
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

Если хочешь зафичреквестить, то такая попытка уже была: https://quality.embarcadero.com/browse/RSP-21420
...
Рейтинг: 0 / 0
with и без with
    #39915974
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
DmSer,

Если хочешь зафичреквестить, то такая попытка уже была: https://quality.embarcadero.com/browse/RSP-21420


Там автор хрень какую-то предложил, в итоге Марко Канто предложил выпилить конструкцию with :)
...
Рейтинг: 0 / 0
with и без with
    #39915985
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой запрос хочу к ним запулить:

The "with" operator in Pascal is very useful. In many cases, it improves code readability. Many programmers who communicate in the Delphi forum use it, like it, but note that there are a number of problems. Here are some of the problems:
1) it is inconvenient to debug code in the with block;
2) the danger of using the "with" operator for several elements at once;
3) if there are several variables with the same name in different scopes, it is difficult to understand which variable the "with"operator will choose.

To solve these problems, I suggest adding the ability to declare aliases in the "with" operator. For example, this way (using the keyword "as" as it is done in the SQL language):
with MyArrayOfRecords[i] as r, GetMyObject() as o do
begin
r. IntVal: = 1;
r. StrVal : = 'Hello';
o. MyRec: = r;
end;

In addition, this would make it easier to modify elements of arrays of records (at the moment, you have to specify the array name every time or use pointers, which worsens the readability of the code).
I know that the "as" operator in Pascal is already used in some cases (type casting, interface query), so you can use another keyword, this is not the most important thing.

You can also consider declaring aliases that have been implemented in the Oxygene language:
https://docs.elementscompiler.com/Oxygene/Statements/With/
(although, it may be less readability)


Кто в английском силён, может что перефразировать?
...
Рейтинг: 0 / 0
with и без with
    #39915987
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
в итоге Марко Канто предложил выпилить конструкцию with :)

Ну, он об этом давно (где-то, в районе выхода XE4) уже говорил, ещё когда обсуждался перевод "классического" кода на мобильный нексджен. Впрочем, он же говорил и о том, что не видит причин для добавления инлайновых переменных , а через релиз они появились :)
...
Рейтинг: 0 / 0
with и без with
    #39916060
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer

The "with" operator in Pascal is very useful....


=>

Pascal’s "WITH" statement is extremely harmful and potentially dangerous.
...
Рейтинг: 0 / 0
with и без with
    #39916065
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
DmSer

пропущено...


=>

Pascal’s "WITH" statement is extremely harmful and potentially dangerous.


С таким лучше и не пытаться :)
...
Рейтинг: 0 / 0
with и без with
    #39916069
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Pascal’s "WITH" statement is extremely harmful and potentially dangerous

Правильнее сформулировать так :)
авторPascal’s "WITH" statement is potentially dangerous, and can be extremely harmful in curved hands, as russians will say.
...
Рейтинг: 0 / 0
with и без with
    #39916078
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev
автор...and can be extremely harmful in curved hands, as russians will say.

... in the crooked hands of Russian programmers.
...
Рейтинг: 0 / 0
with и без with
    #39916082
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да почему же "Russian" ... Одинаково применимо ко всей планете.
...
Рейтинг: 0 / 0
with и без with
    #39916104
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
with и без with
    #39916106
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer

Начнутся новые тараканы, типа конфликтов имен with-алиасов с чем-нибудь.

Лучше бы with вообще запретить, а ввести ссылки, как в c++.
...
Рейтинг: 0 / 0
with и без with
    #39916113
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
Начнутся новые тараканы, типа конфликтов имен with-алиасов с чем-нибудь.

С чем-нибудь это с чем? Псевдоним перекрывает любые видимые (в случае наличия локальных - ошибка компиляции) идентификаторы и действует в рамках выражения.
...
Рейтинг: 0 / 0
with и без with
    #39916120
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
ёёёёё
Начнутся новые тараканы, типа конфликтов имен with-алиасов с чем-нибудь.

С чем-нибудь это с чем? Псевдоним перекрывает любые видимые (в случае наличия локальных - ошибка
компиляции) идентификаторы и действует в рамках выражения.

Будет миленько, когда внутри with имена членов "оголяемой" структуры совпадут с with-алиасом.
...
А ссылка в с++ - это псевдоним, только без глупого with.
...
Рейтинг: 0 / 0
with и без with
    #39916125
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
Будет миленько, когда внутри with имена членов "оголяемой" структуры совпадут с with-алиасом.
...

Доступ к членам только через псевдоним. Неоднозначности там просто не может возникнуть. Или я не понимаю о чём ты.
...
Рейтинг: 0 / 0
with и без with
    #39916131
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
ёёёёё
Будет миленько, когда внутри with имена членов "оголяемой" структуры совпадут с with-алиасом.
...

Доступ к членам только через псевдоним. Неоднозначности там просто не может возникнуть. Или я не понимаю о чём ты.

То есть, прежний паскаль-код компилироваться не будет? Заради чего тогда вообще with сохранять?
...
Рейтинг: 0 / 0
with и без with
    #39916135
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
То есть, прежний паскаль-код компилироваться не будет?

Ну да.

ёёёёё
Заради чего тогда вообще with сохранять?

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

Почему не будет? Прежний код будет работать как и прежде. Но если задан алиас, то работать только через алиас.
...
Рейтинг: 0 / 0
with и без with
    #39916138
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

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


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