OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 00:58

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Есть ли coding style для Оберонов?
СообщениеДобавлено: Понедельник, 08 Февраль, 2016 16:08 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Например, меня интересует такой момент, как лучше описывать параметры функции, сначала выходные параметры или же сначала входные параметры?
То есть PROCEDURE A(VAR a: INTEGER; b: INTEGER); или PROCEDURE A(b: INTEGER; VAR a: INTEGER);
Второй случай мне кажется более естественным, но с другой стороны, когда выполняется присваивание a := b имеем, что "выходной" параметр как бы слева, а "входной" справа.

Также возникает вопрос, как обозначать, что параметр выходной в следующем случае, например:
TYPE PRec = POINTER TO RECORD a: INTEGER END;

(* Здесь p выглядит как входной параметр. *)
PROCEDURE Change(p: PRec);
BEGIN
p.a := 10;
END Change.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Есть ли coding style для Оберонов?
СообщениеДобавлено: Понедельник, 08 Февраль, 2016 16:30 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Входные параметры традиционно слева, выходные - справа. Операция присвоения в этом смысле исключение, хотя она и не является процедурой, чтобы попадать под это правило. Операция копирования строк, например: COPY(from, to). Движение данных в порядке чтения - слева направо.

Если меняется единственный параметр, можно это как-то отражать в имени процедуры, например, словом Change, Update, Modify и т.п. В любом случае, это должно быть семантическое соглашение внутри проекта - работать в функциональном или процедурном стиле с той или иной сущностью. Синтаксически это не отражается. В крайнем случае можете делать модифицируемые переменные VAR-параметрами, но это может только усилить путаницу в некоторых случаях.

Если меняется содержимое объекта или записи в зависимости от некоторых параметров, то ссылка на изменяемый объект передаётся первой, а всё остальное после неё в порядке убывания значимости. Например: INC(x, 15).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Есть ли coding style для Оберонов?
СообщениеДобавлено: Понедельник, 08 Февраль, 2016 20:08 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Есть в ББ файл Programming Conventions, конечно, но заданного вопроса про процедуры там нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Есть ли coding style для Оберонов?
СообщениеДобавлено: Четверг, 11 Февраль, 2016 18:01 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Я ввел правило для себя и своих сотрудников - в точке вызова выходные параметры подчеркиваются.

Если указатель, то нет (подразумевается, что любой объект передан в полный доступ, а дальше уже зависит от интерфейса объекта). При проектировании объектов отделяются интерфейсы чтения и модификаций. Допустим, для каких-нибудь контейнеров может быть Reader, Writer, Slider (для позиционирования). При таком подходе понятно, что именно может сделать вызываемая процедура.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Есть ли coding style для Оберонов?
СообщениеДобавлено: Пятница, 01 Июль, 2016 10:24 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Какие комментарии перед функциями используете?
Пишете ли комментарий в произвольной форме или же там есть определенный набор полей, например: назначение функции, параметры, выходной результат? Какие еще поля используете в комментарии?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Есть ли coding style для Оберонов?
СообщениеДобавлено: Пятница, 01 Июль, 2016 12:32 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Rifat писал(а):
Какие комментарии перед функциями используете?
Пишете ли комментарий в произвольной форме или же там есть определенный набор полей, например: назначение функции, параметры, выходной результат? Какие еще поля используете в комментарии?
Я в комментариях описываю, что функция делает с каждым из параметров, и каковы их допустимые значения/диапазоны и особые случаи/комбинации значений. Иногда это умещается в одно предложение, иногда каждый из параметров приходится расписывать. Аналогично с выходным значением. Редко приходится отдельно описывать поведение фукнции (например, не возвращает управление, пока не случится то-то).

Код:
Sub SetRowReadOnly (Byval row As Integer, Byval columnUseMap As String)
   ' Set read-only status for all cells of the row according to the
   ' columnUseMap. Where the map contains " ", that cell is not in use, and
   ' must be read-only.

Код:
Function RowToTank (Byval row As Integer) As Integer
   ' Convert ugDevices row number into tank number. This shall be used if and
   ' when we use multiple rows of ugDevices to configure one tank in ugTankCfg.
   ' PRE: 0 <= row < ugDevices.GetNumberRows
   ' POST: 0 <= result < maxNumTanksSupported

Код:
Function GetLastNonEmptyTankIndex As Integer
   ' Return the index of the last tank that has at least one device assigned: 0..maxNumTanksSupported-1
   ' If all tanks are empty, then return -1.

Код:
Function FindSlaveTankPos (Byval slaveType As String, Byval slaveAddr As Integer) As Integer
' Find the first tank position that contains the slave of type slaveType with
' address slaveAddr. Return the tank position number if found, -1 otherwise.
' slaveType is one of ("REX", "RTG", "PRO", "IDAU", "SDAU", "R2410", "Enraf", "Whessoe"),
' otherwise return -1.
' If (slaveAddr <= 0), then return -1, i. e. don't search for non-existing devices.

Код:
Function UpdateSlaveDSFields () As Boolean
' Use data in DataCtx.Variable("POS_DEVICE_ADDR" & Pos) and
' DataCtx.Variable("POS_BUDDY_DEVICE_ADDR" & Pos) to detect slave devices that
' were moved to a new tank position. If there are such devices, use the
' DevCommon.SRF_DS_SETUP (or DevEnraf.csr:SRF_ENRAF_DB_R2460 for Enraf devices)
' to update the slave's DS- and MS-fields. For 2410 tank positions we show a
' warning dialog to make user update their settings.
' Return True if data saved successfully, or False if abort is needed.


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

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


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB