Вверх ↑
Главный модератор
Ответов: 2997
Рейтинг: 395
#1: 2013-12-29 11:39:51 ЛС | профиль | цитата
Парадигма программирования HiAsm включает в себя графическое представление понятия Object в виде визуального элемента схемы. Разработчики знают, что названия точек для одного элемента схемы должны быть уникальными, так как среда использует имя, данное точке, как идентификатор. Расмотрим пример элемента, описывающего объект с одним методом, свойством и событием:
#ini
...
[Property]
Property=...
...
[Methods]
doProperty=...|1|
onProperty=...|2|
Property=...|3|
...
Такой элемент будет работать. Пользователь сможет установить значение поля Property по-умолчанию в designtime, прочитать и записать это поле в runtime. Единственное ограничение такого элемента - это невозможность использования имени Property для определения параметров вызова метода doProperty. Вот так будет выглядеть неправильный файл конфигурации элемента:
#ini
...
[Property]
Property=...
...
[Methods]
doProperty=...|1|
onProperty=...|2|
Property=...|3|
Property=...|4|
...
Вывод: надо избегать ситуации когда имена верхних и нижних точек совпадают.

Напрашивается вопрос как часто приходится сталкиваться с подобной ситуацией? Оказывает, что не редко. Рассмотрим реальный элемент, реализующий структуру Rectangle в пакете CNET:
ini

#ini
...
[Property]
...
@X=Sets the x-coordinate of the upper-left corner of this Rectangle structure.|1|0
@Y=Sets the y-coordinate of the upper-left corner of this Rectangle structure.|1|0
@Width=Sets the width of this Rectangle structure.|1|0
@Height=Sets the height of this Rectangle structure.|1|0

[Methods]
...
X=Returns the x-coordinate of the upper-left corner of this Rectangle structure.ARG(int)|3|1
Y=Returns the y-coordinate of the upper-left corner of this Rectangle structure.ARG(int)|3|1
Width=Returns the width of this Rectangle structure.ARG(int)|3|1
Height=Returns the height of this Rectangle structure.ARG(int)|3|1
...
Соответственно схема инициализации структуры в runtime будет выглядеть так:
old_element.png
А теперь посмотрим как выглядела бы схема, если бы не было ограничения на совпадения наименований точек элемента:
new_element.png
ВОПРОС: Как исправить ситуацию?

Малореальные способы: исправление среды. Например, чтобы среда для идентификации точек использовала не только имя, но и тип точки. Или, на крайний случай, использовать case sensitive для имён, то есть, чтобы для среды имена Property и property были различны. Логически напрашивается ещё вариант с префиксом в названии, например так: varProperty для нижних точек.

Предлагаемый способ: несложно реализуемый варинт использования некоего name convention для именования нижних точек, несущих ту же смысловую нагрузку, что и верхние. Это использование символа подчёркивания «_» перед именем нижней точки, причём обязательного только в случае наличия одноимённой верхней точки:
#ini
...
[Property]
Property=...
...
[Methods]
doProperty=...|1|
onProperty=...|2|
_Property=...|3|
Property=...|4|
...
Почему нижней точки, а не верхней? Это продиктовано реализацией функции d() кодогенератора RTCG для правильного выполнения которой, необходимо совпадение имён верхней точки с названием свойства. Если у Вас есть своё мнение по данному вопросу, то принимаются любые идеи, могущие решить данную проблему.

карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
файлы: 2old_element.png [4.3KB] [709], new_element.png [2KB] [483]