ОПРЕДЕЛЕНИЕ ПЕРЕМЕННЫХ И МЕСТ, ОБЛАСТИ ВИДИМОСТИ |
Все переменные CAPER традиционно различаются по По области видимости различаем глобальные, приватные и локальные
переменные. Глобальные переменные видны на всех уровнях программы
всеми ее компонентами. PUBLIC <список переменных с инициализацией> <список переменных с инициализацией> - это <дескриптор переменной>[:= <выражение>] {[ , <дескриптор переменной> public var1 := 10’B, var2, var3 := array( 'C' , 0, 100, 200 ) Public-переменные статичны по своему характеру - память под переменные
выделяется момент старта виртуальной машины и существует до конца ее работы.
В момент определения в общем хранилище фиксируется факт создания переменной с заданным именем. Public-переменная может быть удалена, что реализуется удалением регистрации переменной с данным именем из хранилища.Public-переменная может быть определена в любом месте любого блока или PRIVATE <список переменных с инициализацией> Приватные переменные, определенные в блоке, видны только в данном блоке и
его подблоках. Private-переменные статичны по своему характеру: память им
выделяется внутри модуля. Переменные данного типа становятся "живыми" в private pVar1 :=0, pVar2 :=1 block BL1( Par1, Par2 ) LOCAL <список переменных с инициализацией> Локальные переменные создаются динамически после входа в блок и выполнения оператора LOCAL. Локальные переменные уничтожаются после выхода из блока. Пример: /* Инициализация arr1 3-х мерным массивом , двухбайтные элементы которого PUBLIC arr1 := array( 'H', 25 , 3, 4, 5 ) BLOCK block1(pVar1, pVar2) private var1, var2 := Region( arr1, null, 2, 2, 1, 2, 3, 4) BLOCK block1(pVar1, pVar2) Lvar2[ 1, 2, 2 ] := a2[ 3 ] ; * вызовет сообщение компилятора об ошибке, => PUBLIC-переменные могут быть удалены оператором DELETE (см. далее). INIT PUBLIC <список переменных с инициализацией> запрещают повторную инициализацию переменной. Аналогично INIT действует на PRIVATE-переменные: init private var:=0 осуществит инициализацию в момент первого выполнения, в последующие проходы присвоение игнорируется. Язык CAPER позволяет написание реентерабельных программ, т.е. программ(блоков команд), которые могут быть вызваны в разные моменты времени несколькими параллельно исполняющимися блоками. С целью формирования уникального для каждого вызова поля локальных переменных необходимо использовать оператор LOCAL <список переменных с инициализацией> а для PRIVATE переменных - оператор DEFINE <список переменных с инициализацией> Как и ранее, к локальным переменным и входным параметрам блоков можно
получить доступ из других блоков, т.е. возможны динамические назначения извне
значений таких переменных, отслеживание их значений. PLACES <список переменных с инициализацией> Управление состоянием места может осуществляться только из блока, установившего состояние, отличное от FREE, или любым блоком в отношении места с состоянием FREE, с помощью функций LockF( <состояние>, <адрес места> [ { , <адрес места> } ] ) WRITE_ONLY - только для записи или освобождение места - установление состояния FREE UnlockF( <адрес места> [ { , <адрес места> } ] ) - разблокирование перечисленных в параметрах мест. WRITE_ONLY, READ_ONLY, LOCKED, FREE - макросы, которым сопоставлены числа числовые значения. #macro MY_PLACE_STATUS 11 LockF( placename, MY_PLACE_STATUS ) |