OberonCore https://forum.oberoncore.ru/ |
|
Есть ли coding style для Оберонов? https://forum.oberoncore.ru/viewtopic.php?f=86&t=5618 |
Страница 1 из 1 |
Автор: | Rifat [ Понедельник, 08 Февраль, 2016 16:08 ] |
Заголовок сообщения: | Есть ли coding style для Оберонов? |
Например, меня интересует такой момент, как лучше описывать параметры функции, сначала выходные параметры или же сначала входные параметры? То есть 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. |
Автор: | Александр Ильин [ Понедельник, 08 Февраль, 2016 16:30 ] |
Заголовок сообщения: | Re: Есть ли coding style для Оберонов? |
Входные параметры традиционно слева, выходные - справа. Операция присвоения в этом смысле исключение, хотя она и не является процедурой, чтобы попадать под это правило. Операция копирования строк, например: COPY(from, to). Движение данных в порядке чтения - слева направо. Если меняется единственный параметр, можно это как-то отражать в имени процедуры, например, словом Change, Update, Modify и т.п. В любом случае, это должно быть семантическое соглашение внутри проекта - работать в функциональном или процедурном стиле с той или иной сущностью. Синтаксически это не отражается. В крайнем случае можете делать модифицируемые переменные VAR-параметрами, но это может только усилить путаницу в некоторых случаях. Если меняется содержимое объекта или записи в зависимости от некоторых параметров, то ссылка на изменяемый объект передаётся первой, а всё остальное после неё в порядке убывания значимости. Например: INC(x, 15). |
Автор: | Пётр Кушнир [ Понедельник, 08 Февраль, 2016 20:08 ] |
Заголовок сообщения: | Re: Есть ли coding style для Оберонов? |
Есть в ББ файл Programming Conventions, конечно, но заданного вопроса про процедуры там нет. |
Автор: | Илья Ермаков [ Четверг, 11 Февраль, 2016 18:01 ] |
Заголовок сообщения: | Re: Есть ли coding style для Оберонов? |
Я ввел правило для себя и своих сотрудников - в точке вызова выходные параметры подчеркиваются. Если указатель, то нет (подразумевается, что любой объект передан в полный доступ, а дальше уже зависит от интерфейса объекта). При проектировании объектов отделяются интерфейсы чтения и модификаций. Допустим, для каких-нибудь контейнеров может быть Reader, Writer, Slider (для позиционирования). При таком подходе понятно, что именно может сделать вызываемая процедура. |
Автор: | Rifat [ Пятница, 01 Июль, 2016 10:24 ] |
Заголовок сообщения: | Re: Есть ли coding style для Оберонов? |
Какие комментарии перед функциями используете? Пишете ли комментарий в произвольной форме или же там есть определенный набор полей, например: назначение функции, параметры, выходной результат? Какие еще поля используете в комментарии? |
Автор: | Александр Ильин [ Пятница, 01 Июль, 2016 12:32 ] |
Заголовок сообщения: | Re: Есть ли coding style для Оберонов? |
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. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |