Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц, летом дешевле!

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2022, 16:54   #11
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,581
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
with добавляет путаницу. Кстати, чтобы не делать кучу вложенных блоков, можно в одном with сделать перечисление через запятую.
Вложенные блоки были сделаны для наглядности. А путаница все равно получается.
macomics вне форума Ответить с цитированием
Старый 09.09.2022, 01:09   #12
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,812
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Вот поэтому и бесполезный. Применяется только в ряде случаев и во всех этих случаях может быть заменен на прямую ссылку.
Поясни? Мы об одном и том же говорим? Self неявный параметр метода класса дающий ссылку на конкретный экземпляр класса, для которого вызван этот метод. Как его заменить прямой ссылкой? Да нам действительно очень редко возникает необходимость самим писать в коде слово Self. Но это только потому что компилятор сам неявно подставляет эту ссылку когда мы в коде метода класса обращаемся к полям, методам и процедурам этого экземпляра класса. Не было бы этого неявного параметра, как бы это всё работало бы?
northener вне форума Ответить с цитированием
Старый 09.09.2022, 01:16   #13
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,812
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
with добавляет путаницу
Нет. Неуёмное и ни чем не оправданное его употребление порой действительно мешает. Особенно при отладке.
Но естественно при вложенных with нужно точно знать в каком порядке ищется переменная, поле и т.д.
Хотя по большому счету список uses это тот же самый with. Знаешь правила для одного - знаешь правила и для другого.
northener вне форума Ответить с цитированием
Старый 09.09.2022, 01:48   #14
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,581
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Поясни? Мы об одном и том же говорим? Self неявный параметр метода класса дающий ссылку на конкретный экземпляр класса, для которого вызван этот метод. Как его заменить прямой ссылкой? Да нам действительно очень редко возникает необходимость самим писать в коде слово Self. Но это только потому что компилятор сам неявно подставляет эту ссылку когда мы в коде метода класса обращаемся к полям, методам и процедурам этого экземпляра класса. Не было бы этого неявного параметра, как бы это всё работало бы?
Вот вы сами это и объяснили в вопросе. Компилятор сам подставляет. Для этого не обязательно присутствие зарезервированного слова Self.
macomics вне форума Ответить с цитированием
Старый 09.09.2022, 02:52   #15
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,812
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Вот вы сами это и объяснили в вопросе. Компилятор сам подставляет. Для этого не обязательно присутствие зарезервированного слова Self.
Да никакого "этого" я не объяснил. Я лишь указал вам на на ваше, так скажем "недопонимание" сути обсуждения.
Ведь некий "Self" (вы сами сказали что суть не в конкретном слове) в конструкции
Код:
with TSomeObject.Create do
и так присутствует.
Ведь компилятор эту ссылку на созданный объект знает. И именно её и использует, если и когда мы задаем значения полям этого объекта. Так почему никто до сих пор не придумал как эту ссылку дать разработчику программы? Да это сложно и не понятно как сделать. Но... может разработчики компилятора напрягут свои мозги и придумают?
northener вне форума Ответить с цитированием
Старый 09.09.2022, 03:21   #16
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,581
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Ведь некий "Self" (вы сами сказали что суть не в конкретном слове) в конструкции
Код:
with TSomeObject.Create do
и так присутствует.
Как раз в самой конструкции этого Self (условного) не присутствует. Self это не явный параметр передаваемый в каждый метод класса и содержащий ссылку на экземпляр этого класса. Но что должен представлять Self в такой конструкции
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  with TSomeObject.Create, TOtherObject.Create do begin
    { Self = Form1 }
  end;
  { или такой }
  with TSomeObject.Create do
    with TOtherObject.Create do begin
      { Self = Form1 }
    end;
end;
В данном случае идет подстановка не самой ссылки, а именно имени (временного) объекта, на который ссылается with .. do. Тогда как внутри имени класса Self это формальный параметр

Последний раз редактировалось macomics; 09.09.2022 в 03:25.
macomics вне форума Ответить с цитированием
Старый 09.09.2022, 10:26   #17
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,027
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Так почему никто до сих пор не придумал как эту ссылку дать разработчику программы?
Для своих классов можно просто добавить свойство Self (или любое иное имя), которое вернет ссылку на объект.

Цитата:
Сообщение от macomics Посмотреть сообщение
with TSomeObject.Create do
Тут может возникнуть вопрос целесообразности подобных конструкций. Что не дает завести отдельную переменную под объект?
Arigato вне форума Ответить с цитированием
Старый 09.09.2022, 10:54   #18
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,581
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Что не дает завести отдельную переменную под объект?
Need for speed! (перевод - лень).
macomics вне форума Ответить с цитированием
Старый 10.09.2022, 01:36   #19
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,812
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
В данном случае идет подстановка не самой ссылки, а именно имени (временного) объекта
Компилятор никогда не знал, не знает и не хочет никогда знать никаких имен!
Он работает только с регистрами процессора и их содержимым.
Привожу скришот тестовой программы с окном CPU и с пояснениями.
https://disk.yandex.ru/i/L4wrVYyKVq8Abg
northener вне форума Ответить с цитированием
Старый 10.09.2022, 01:37   #20
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,812
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Для своих классов можно просто добавить свойство Self (или любое иное имя), которое вернет ссылку на объект.
И как его добавить?
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц, летом дешевле!

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обратиться к динамически созданному объекту, изменить его? 2bfree Общие вопросы Delphi 3 24.07.2011 14:06
Обратиться к объекту фрейма без id'а SkrudjMakdak JavaScript, Ajax 1 11.06.2011 21:46
Как обратиться к объекту формы из другого класса java micha-r Общие вопросы по Java, Java SE, Kotlin 1 03.10.2009 21:07
Можно ли обратиться к объекту, запустившему событие? ekesar Microsoft Office Excel 7 14.12.2008 21:17
Как обратиться к объекту который был только что создан Arassir Помощь студентам 5 24.10.2008 20:42