Общесистемные пользовательские объекты
JavaLikeCalc предоставляет поддержку типа данных объект "Object". Объект представляет собой ассоциативный контейнер свойств и функций. Свойства могут содержать как данные четырёх базовых типов, так и другие объекты. Доступ к свойствам объекта может осуществляться посредством записи имён свойств к объекту obj.prop, через точку, а также посредством заключения имени свойства в квадратные скобки obj["prop"]. Очевидно, что первый механизм статичен, а второй позволяет указывать имя свойства через переменную. Удалить свойство объекта можно директивой "delete". Имя свойства через точку не должно начинаться с цифры и содержать символы операций, иначе, для первой цифры, должен использоваться префикс объекта — SYS.BD.SQLite.db_1s, или осуществляться запись в квадратных скобках — SYS.BD.SQLite["1+s"], для символов операций в названии. Чтение неопределённого свойства вернёт null-EVAL. Создание объекта осуществляется посредством ключевого слова new: varO = new Object(). Базовое определение объекта не содержит функций. Операции копирования объекта, на самом деле, делают ссылку на исходный объект. При удалении объекта осуществляется уменьшение счётчика ссылок, а при достижении счётчика нуля, объект удаляется физически.
Разные компоненты OpenSCADA могут доопределять базовый объект особыми свойствами и функциями. Стандартным расширением объекта является массив "Array", который создаётся командой varO = new Array(prm1,prm2,prm3,...,prmN). Перечисленные через запятую параметры помещаются в массив в исходном порядке. Если параметр только один то массив инициируется указанным количеством пустых элементов. Особенностью массива является то, что он работает со свойствами, как с индексами и основным механизмом обращения является заключение индекса в квадратные скобки arr[1]. Массив хранит свойства в собственном контейнере одномерного массива. Цифровые свойства массива используются для доступа непосредственно к массиву, а символьные работают как свойства объекта. Детальнее про свойства и функции массива можно прочитать по ссылке.
Объект регулярного выражения "RegExp" создаётся командой varO = new RegExp(pat, flg), где pat — шаблон регулярного выражения, а flg — флаги поиска. Объект работы с регулярными выражениями основан на библиотеке "PCRE". При глобальном поиске устанавливается атрибут объекта "lastIndex", что позволяет продолжить поиск при следующем вызове функции. В случае неудачного поиска атрибут "lastIndex" сбрасывается в ноль. Детальнее про свойства и функции объекта регулярного выражения можно прочитать по ссылке.
Для произвольного доступа к аргументам функции предусмотрен объект аргументов, обратиться к которому можно посредством символа "arguments". Этот объект содержит свойство "length" с количеством аргументов у функции и позволяет обратиться к значению аргумента посредством его номера или идентификатора. Рассмотрим перебор аргументов по циклу:
args = new Array();
for(var i = 0; i < arguments.length; i++)
args[i] = arguments[i];
Частичными свойствами объекта обладают и базовые типы. Свойства и функции базовых типов приведены ниже:
- Нулевой тип, функции:
- bool isEVal(); — возвращает "true".
- Логический тип, функции:
- bool isEVal(); bool isNaN( ); — проверяет значение на null-EVAL.
- string toString(); — представляет значение в виде строки "true" или "false".
- real toReal(); — читает логическое значение как вещественное число.
- int toInt(); — читает логическое значение как целое число.
- Целое и вещественное число:
- Свойства:
- MAX_VALUE — максимальное значение;
- MIN_VALUE — минимальное значение;
- NaN — недостоверное значение.
- Функции:
- bool isEVal(); bool isNaN( ); — проверяет значение на null-EVAL, и не число для Вещественного.
- string toExponential( int numbs = -1 ); — возвращает строку отформатированного числа, в экспоненциальной нотации и количеством значащих цифр numbs. Если numbs отсутствует то цифр будет столько сколько необходимо.
- string toFixed( int numbs = 0, int len = 0, bool sign = false ); — возвращает строку отформатированного числа в нотации с фиксированной точкой и количеством цифр после десятичной точки numbs, с минимальной длиной len и обязательным знаком sign. Если numbs отсутствует то количество цифр после десятичной точки равно нулю.
- string toPrecision( int prec = -1 ); — возвращает строку отформатированного числа с количеством значащих цифр prec.
- string toString( int base = 10, int len = -1, bool sign = false ); — возвращает строку отформатированного числа целого типа с базой представления base (2-36), с минимальной длиной len и обязательным знаком sign.
- real toReal(); — читает целое-вещественное значение как вещественное число.
- int toInt(); — читает целое-вещественное значение как целое число.
- Строка:
- Свойства:
- int length — длина строки.
- Функции:
- bool isEVal(); — проверяет значение на null-EVAL.
- bool isNaN( bool whole = true ); — проверяет строку на не число, и в целом whole.
- string charAt( int symb, string type = "" ); — достаёт из строки символ под номером symb типа type. Следующие типы символа поддерживаются: ""-ASCII и простой один байт, UTF-8, UTF-16, UTF-32. В случае с UTF-8, позиция символа symb меняется в позицию следующего символа поскольку длина символов этого типа переменная.
- int charCodeAt( int symb, string type = "" ); — достаёт из строки код символа symb типа type. Следующие типы символа поддерживаются: ""-ASCII и простой один байт, UTF-8, UTF-16, UTF-16LE, UTF-16BE, UTF-32, UTF-32LE, UTF-32BE. В случае с UTF-8, позиция символа symb меняется в позицию следующего символа поскольку длина символов этого типа переменная.
- string concat( string val1, string val2, ... ); — возвращает новую строку, сформированную путём присоединения значений val1 и т.д. к исходной.
- int indexOf( string substr, int start = 0 ); — возвращает позицию искомой строки substr в исходной строке, начиная с позиции start. Если исходная позиция не указана то поиск начинается с начала. Если искомой строки не найдено то возвращается "-1".
- int lastIndexOf( string substr, int start = {end} ); — возвращает позицию искомой строки substr в исходной строке, начиная с позиции start, при поиске с конца. Если исходная позиция не указана то поиск начинается с конца. Если искомой строки не найдено то возвращается "-1".
- int search( string pat, string flg = "" ); — ищет в строке по шаблону pat и флагами шаблона flg. Возвращает положение найденной подстроки иначе "-1".
var rez = "Java123Script".search("script","i"); // rez = 7
- int search( RegExp pat ); — ищет в строке по шаблону "RegExp" pat. Возвращает положение найденной подстроки иначе "-1".
var rez = "Java123Script".search(new RegExp("script","i")); // rez = 7
- Array match( string pat, string flg = "" ); — ищет в строке по шаблону pat и флагами шаблона flg. Возвращает массив с найденной подстрокой (0) и подвыражениями (>1). Атрибут "index" массива устанавливается в позицию найденной подстроки. Атрибут "input" устанавливается в исходную строку. Атрибут "err" устанавливается в код ошибки операции.
var rez = "1 плюс 2 плюс 3".match("\\d+","g"); // rez = [1], [2], [3]
- Array match( TRegExp pat ); — ищет в строке по шаблону "RegExp" pat. Возвращает массив с найденной подстрокой (0) и подвыражениями (>1). Атрибут "index" массива устанавливается в позицию найденной подстроки. Атрибут "input" устанавливается в исходную строку. Атрибут "err" устанавливается в код ошибки операции.
var rez = "1 плюс 2 плюс 3".match(new RegExp("\\d+","g")); // rez = [1], [2], [3]
- string slice( int beg, int end ); string substring( int beg, int end ); — возвращает подстроку извлечённую из исходной, начиная с позиции beg и по end (не включая), нумерация с нуля. Если значение начала или конца отрицательно, то отсчёт ведётся с конца строки. Если конец не указан, то концом является конец строки. Например, конструкция substring(-2) вернет последние два символа строки.
- Array split( string sep, int limit ); — возвращает массив элементов строки, разделённых sep и с ограничением количества элементов limit.
- Array split( RegExp pat, int limit ); — возвращает массив элементов строки, разделённых шаблоном "RegExp" pat и с ограничением количества элементов limit.
rez = "1,2, 3 , 4 ,5".split(new RegExp("\\s*,\\s*")); // rez = [1], [2], [3], [4], [5]
- string insert( int pos, string substr ); — вставляет подстроку substr в позицию pos текущей строки.
- string replace( int pos, int n, string str ); — заменяет подстроки с позиции pos и длиной n в текущей строке, на строку str.
rez = "Javascript".replace(4,3,"67"); // rez = "Java67ipt"
- string replace( string substr, string str ); — заменяет все подстроки substr на строку str.
rez = "123 321".replace("3","55"); // rez = "1255 5521"
- string replace( RegExp pat, string str ); — заменяет подстроки по шаблону pat на строку str.
rez = "value = \"123\"".replace(new RegExp("\"([^\"]*)\"","g"),"``$1''")); // rez = "value = ``123''"
- real toReal(); — преобразует текущую строку в вещественное число.
- int toInt( int base = 10 ); — преобразует текущую строку в целое число, в соответствии с основанием base (от 2 до 36). Если основание равно 0 то будет учитываться префиксная запись для определения основания (123-десятичное; 0123-восьмеричное; 0x123-шестнадцатеричное).
- string {parse,parseEnd}( int pos, string sep = ".", int off = {0,{length}}, bool mergeSepSymb = false ); — выделяет из исходной строки элемент pos, для разделителя элементов sep и от смещения off (останов на начале следующего токена, или конца для parseEnd). mergeSepSymb определяет разрешение объединения группы одинаковых символов в один разделитель. Результирующее смещение помещается назад в off. parseEnd() делает тоже самое, но с конца.
- string parseLine( int pos, int off = 0 ); — выделяет строку с номером pos и от смещения off (останов на начале следующего токена). Результирующее смещение помещается назад в off.
- string parsePath( int pos, int offCmptbl = 0, int off = 0 ); — выделяет из исходного пути элемент pos и от смещения off (останов на начале следующего токена) или offCmtbl (останов на следующем символе конца текущего токена — для совместимости). Результирующее смещение помещается назад в off или offCmtbl.
- string parsePathEnd( int pos, int off = {length} ); — выделяет из конца строки исходного пути элемент pos и от смещения off (останов на конце следующего токена). Результирующее смещение помещается назад в off.
- string path2sep( string sep = "." ); — преобразует путь в текущей строке в строку с разделителем sep.
- string trim( string cfg = " \n\t\r" ); — обрезает строку с начала и конца, для символов cfg.