Справочник DemonScript: Основы синтаксиса


Типы данных


Функции работы с типами данных


Операции

Арифметические операции:

X+Y - сложение вещественных чисел, строк, графов
X-Y - вычитание вещественных чисел, графов
X*Y - умножение; результат: float
X/Y, X\Y - вещественное и целочисленное деление; результат: float
X%Y - остаток от деления; результат: float
X++, X-- - постинкремент и постдекремент; результат: float
X+=, X-=, X*=, X/=, X\=, X%= - операция и присваивание; результат: float
X == Y, X != Y - равенство, неравенство двух вещественных чисел, графов
X < Y, X <= Y - меньше, меньше или равно; результат: logic
X > Y, X >= Y - больше, больше или равно; результат: logic

Логические операции:

X <-> Y - эквивалентность (следование в две стороны); результат: logic
X -> Y - импликация (логическое следование); результат: logic
X & Y, X | Y - конъюнкция (логическое И), дизъюнкция (логическое ИЛИ); результат: logic
X == Y, X != Y - равенство, неравенство двух логических значений; результат: logic
!X - логическое отрицание; результат: logic

Мультиарное условие:

E?A:B - тернарное условие: если E истинно, то A, иначе B
E?A:B:C - кватернарное условие: если E истинно, то A, если E ложь, то B, иначе С
E?A:B:C:D - квантиринарное условие: если E истинно, то A, если E ложь, то B, если E не определено, то С, иначе D

Если скобок нет, арифметические и логические операции выполняются слева-направо.

Есть также следующие две логические функции:


Приоритеты

Приоритеты операций в порядке возрастания:

= - прямое присваивание
?::: - мультиарное условие
<-> - эквивалентность (следование в две стороны)
-> - импликация (логическое следование)
| - дизъюнкция (логическое ИЛИ)
& - конъюнкция (логическое И)
==,!= - операции равенства и неравенства
<,<=,>,>= - операции сравнения
+,- - сложение и вычитание
*,/,\,% - умножение, вещественное деление, целочисленное деление, остаток от деления
! - отрицание
X E Y - связывание объекта ребром
X++ - постинкремент
X-- - постдекремент
X+= - сложение и присваивание
X-= - вычитание и присваивание
X*= - умножение и присваивание
X/= - вещественное деление и присваивание
X\= - целочисленное деление и присваивание
X%= - остаток и присваивание
X[] - обращение к элементу объекта по индексу
X.name() - обращение к методу объекта
X.name - обращение к полю объекта
name() - вызов функции
Module.name() - вызов функции из модуля
[] - константа содержащая массив
0.0 - константа содержащая число
"hello" или 'hello' - константа содержащая строку
@a - константа содержащая тип связи
$a - константа содержащая имя узла
() - выражение в скобках
name - переменная

Так, в арифметике 1+2*3-4 это (1+(2*3))-4, а в логике X==Y & Z -> A | B & C это ((X==Y) & Z) -> ((A | B) & C)).


Переменные и константы


Условные операторы


Циклы


Анонимные функции

Безимянные функции, которые можно передавать как значение переменной и выполнить в нужном месте кода

Пример:

var f = (a,b)=>a+b // сохраняем функцию, выполняющую сложение аргументов a и b в переменную f
out f(1,2)         // выводим результат выполнения функции
>> 3

Зарезервированные имена

Ниже указанные имена являются служебными и следовательно запрещено их использование в скрипте в качестве имен переменных и демонов!