Глава 12

Типы данных

ARexx работает с четырьмя типами данных, обобщенно называемых символами:

Фиксированные символы

Фиксированный символ может состоять из цифр 0-9, десятичной точки, экспоненты "Е", а также предшествующего знака + или -., Фиксированные символы - по сути числа, всегда являющиеся константами. Кстати, единственным определением константы в ARexx-e служит то, что она не может стоять в левой части оператора присваивания.

ARexx воспринимает числа, как десятичные. Если мы хотим ввести шестнадцатеричное число, мы должны ввести его, как строку (т.е. заклю­чить в апострофы) и добавить после закрывающего апострофа дескриптор "х" (дескриптором двоичных чисел является "b"):

123    - десятичное число
'CD9'x - шестнадцатеричное число может включать цифры 0-9 и буквы A-F.
'110'b - двоичное число состоит только из нулей и единиц.

Любая последовательность литер (мы сознательно используем синоним слова "символ" - литера, чтобы не было путаницы с символами ARexx-a), заключенная в апострофы или кавычки, считается литеральной строкой, по сути являющейся константой.

Простые символы

Это аналоги простых переменных в других языках программирова­ния. Имя простого символа не может начинаться с числа и иметь где-либо внутри себя точку. Любопытным свойством является то, что если не присваивать никакого значения простому символу, то при первом же его использовании этим значением станет его собственное имя в заглавном регистре. Например:

say hello   ==> HELLO
hello = 1
say hello   ==> 1
say 'hello' ==> hello (литеральная строка, а не имя простого символа)
Стем-символы

Аналог массивов, существующих практически во всех языках программирования. Имя стем-символа (или просто стема) всегда завершается точкой. Пример:

array.   =   10

Подобное присвоение приведет к тому, что при считывании любого элемента стема, будет возвращено значение 10.

Составные (compound) символы

Эти символы содержат по крайней мере одну точку внутри своего имени. По сути являются обращением к одному из элементов стема. Примеры:

array.  =  10                              /*  Обращение   к любому  не   */
array.1 =  'Первый элемент'                        /* инициализированному */
                                             /*   элементу теперь  даст   */
                                                     /*   значение   10   */
say array.1        ==>   Первый  элемент
say array.3        ==>   10
say array.9        ==>   10
this        =  5
array.this  =  2
say array.this     ==>   2                              /* Простой символ */
                                                     /* является индексом */ 
say array.1.1      ==>   10                           /* Двумерный массив */

Сайт создан в системе uCoz