Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 19 мар 2024, 07:07

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: 05 авг 2020, 21:08 
Не в сети

Сообщения: 350
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?


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 06 авг 2020, 16:46 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 06 авг 2020, 17:09 
Не в сети
Администратор
Аватара пользователя

Сообщения: 273
Откуда: Россия
Например, здесь:
https://studopedia.ru/10_237326_sposobi-peredachi-parametrov-funktsiyam.html


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

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

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

· по ссылке.


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


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 06 авг 2020, 17:45 
Не в сети

Сообщения: 350
Пока назвали "параметр-переменная" и возможно, что оно так и останется. 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


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


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 07 авг 2020, 16:54 
Не в сети
Администратор
Аватара пользователя

Сообщения: 273
Откуда: Россия
budden писал(а):
странно, когда в исходнике написано VAR (variable), а вслух нужно читать reference

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club