Оберон-клуб «ВЄДАsoft»
https://zx.oberon.org/forum/

Как правильно назвать передачу параметров VAR?
https://zx.oberon.org/forum/viewtopic.php?f=79&t=489
Страница 1 из 1

Автор:  budden [ 05 авг 2020, 21:08 ]
Заголовок сообщения:  Как правильно назвать передачу параметров VAR?

https://www.intuit.ru/studies/courses/4453/686/lecture/14090?page=2

Здесь она называется передачей по ссылке. Но тогда возникает некоторая неясность со ссылочными типами. Если мы передаём объект в процедуру, то он уже сразу передаётся "по ссылке", хотя параметр-то по значению. Т.е. конфликт похожих понятий в близкой по смыслу области.

В другом месте такая передача называется передачей по имени:

https://infopedia.su/19x5463.html

Вот эта программка
Код: "OBERON"
  1.  
  2. MODULE Proba;
  3.  
  4. IMPORT KernelLog;
  5.  
  6. VAR glob : ARRAY 2 OF SIGNED8;
  7.  
  8.  
  9. PROCEDURE Колдуй(VAR param: SIGNED8);
  10. BEGIN
  11. KernelLog.String("Изначально glob[1] есть ");
  12. KernelLog.Int(glob[1],0); KernelLog.Ln;
  13. param := 7;
  14. KernelLog.String("Поменяли param внутри процедуру и glob[1] стал ");
  15. KernelLog.Int(glob[1],0); KernelLog.Ln;
  16. END Колдуй;
  17.  
  18. PROCEDURE Дей*();
  19. BEGIN
  20. KernelLog.String("==============="); KernelLog.Ln;
  21. Колдуй(glob[1]);
  22. KernelLog.String("Вернулись из процедуры и glob[1] ожидаемо стал ");
  23. KernelLog.Int(glob[1],0);
  24. END Дей;
  25.  
  26. END Proba.Дей ~
  27.  


Печатает вот это:

Код: "OBERON"
  1. Изначально glob есть 0
  2. Поменяли param внутри процедуру и glob стал 7
  3. Вернулись из процедуры и glob ожидаемо стал 7


Всё же не поворачивается язык называть передачу ссылки на эл-т массива передачей по имени...

Пока назову "параметр-переменная". А что делать тогда с const?

Автор:  Zorko [ 06 авг 2020, 16:46 ]
Заголовок сообщения:  Re: Как правильно назвать передачу параметров VAR?

Насколько объяснили мне: передача по ссылке отличается от передачи указателя гарантированно тем, что объект точно существует. Тогда как указатель может быть NIL.

Автор:  Saferoll [ 06 авг 2020, 17:09 ]
Заголовок сообщения:  Re: Как правильно назвать передачу параметров VAR?

Например, здесь:
https://studopedia.ru/10_237326_sposobi-peredachi-parametrov-funktsiyam.html


Цитата:
В С++ передача параметров осуществляется тремя способами:

· по копии (или по значению);

· по адресу (или через указатель);

· по ссылке.


По ссылке (с помощью &) - больше всего похоже на VAR-параметры Паскаля/Оберона.
"По имени" - это специфический способ Алгола, что-то похожее на макроподстановку.

Автор:  budden [ 06 авг 2020, 17:45 ]
Заголовок сообщения:  Re: Как правильно назвать передачу параметров VAR?

Пока назвали "параметр-переменная" и возможно, что оно так и останется. CONST - тоже параметр-переменная, с ограничением "только для чтения". Хочется уменьшить нагрузку на слово "ссылка", которое перегружено смыслами. Кроме того, странно, когда в исходнике написано VAR (variable), а вслух нужно читать reference. В качестве обоснования - это перевод близко к тексту, там написано:

Цитата:
There are two kinds
of parameters, value and variable parameters, indicated in the formal parameter list by the
absence or presence of the keyword VAR


"Есть два вида параметров, параметры-значения и параметры-переменные, к-рые различаются в списке форм. параметров по отсутствию или наличию слова 'ПЕРЕМ'"

Автор:  Saferoll [ 07 авг 2020, 16:54 ]
Заголовок сообщения:  Re: Как правильно назвать передачу параметров VAR?

budden писал(а):
странно, когда в исходнике написано VAR (variable), а вслух нужно читать reference

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

Страница 1 из 1 Часовой пояс: UTC + 2 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/