Основы языка Ninox
Язык скриптов Ninox служит для написания формул, кнопок и триггеров ваших баз. На этой странице собрано то, что нужно знать, прежде чем писать первые строки.
Ninox — типизированный и предварительно компилируемый язык. Это значит, что типы обрабатываемых данных известны заранее, в отличие от других языков, например JavaScript, где переменные могут использоваться без знания их типа.
Одно из главных достоинств Ninox — то, что порождаемый им код особенно надёжен: сбои случаются крайне редко.
Отметим, что скрипт Ninox перед выполнением компилируется в JavaScript.
Вложенный и линейный код
Каждая функция или инструкция возвращает значение, которое можно сразу передать параметром в другую функцию или инструкцию:
var a := format(now(), "DD/MM/YYYY");Таким образом, переменной можно присвоить целый набор вложенных вызовов:
var a := true;
var b := if a then "true" else "false";Можно также присвоить b результат блока линейного кода, заключённого в скобки:
var b := (
var a := true;
if a then "true" else "false" end
);Важно помнить, что в линейном коде тип и возвращаемое значение всегда определяет последняя строка. В этом примере b будет равно 10:
var b := (
var a := true;
if a then "true" else "false" end;
10
);Такой блок записывается в скобках, а не между do и end, как тело цикла или функции. Следующий код отклоняется уже при написании («Ожидается символ: as»):
var b := do
var a := true;
if a then "true" else "false" end
end;do … end открывает блок только после for … in … do, while … do или function f(…) do. Во всех остальных местах (в начале формулы, после :=, после then…) do начинает do as server, do as transaction…: Ninox ожидает тогда слово as.
Внимание
Запрос, отправленный через API (/query) и начинающийся с do без as, возвращает null без какого-либо сообщения об ошибке. Ловушка встречается при написании тестового запроса: (var n := 2; n) возвращает 2, do var n := 2; n end не возвращает ничего.
(Измерено через API Ninox.)
Методы
Методы — это функции, которые принимают один или несколько параметров и возвращают значение. И параметры, и возвращаемое значение предопределены.
У некоторых методов бывает несколько наборов параметров:
date(year, month, day)
Возвращает значение-дату.date(myTimeValue)
Преобразует заданное значение, связанное со временем, в дату. Если значение — число, оно означает время Unix в миллисекундах.
Полный список методов и их распределение по категориям см. в официальной документации Ninox.
Инструкции
var, if then else, for, switch, select where и т. д. — это инструкции.
В отличие от методов, тип возвращаемого значения инструкции зависит от содержащегося в ней кода. Например, следующий код вернёт массив чисел [1, 2]:
for i in range(1,3) do
i;
end;