From OpenSCADAWiki
Jump to: navigation, search

Общесистемные пользовательские объекты

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.