Язык формул Creatium спроектирован таким образом, чтобы его можно было быстро освоить и начать использовать за максимально короткий период времени, при этом он дает большие возможности для работы с данными, которые никак иначе не доступны.
В этой статье мы разберем основы формул.
Готовые примеры формулТипы данных
Числа (number)
Целые числа:
123
, -34
, 0
и т.д.Дробные числа:
10.22
, 0.01
и т.д.Поддерживается математическая запись для очень больших и очень маленьких чисел:
1.602176565e-19
, 6.02214129e+23
и т.д.Особые значения чисел:
Infinity
(бесконечность) и NaN
(”Not a Number”, может возникать в тригонометрических функциях).Советы по работе с числами
Строки (string)
Заключаются в одинарные (
'
) или в двойные кавычки ("
). Разного рода типографские кавычки (вроде ‘
, ’
, ‟
, ”
, и т.д.) не принимаются.Примеры:
"Hello!"
, "123"
, 'Test'
и т.д.Если внутри строки встречается такая же кавычка, как та, что используется для формирования строки, перед ней нужно поставить знак
\
.Пример:
"Это просто \"чудо\" какое-то"
. Или заключить строку в кавычки другого типа, чтобы не было конфликта кавычек одного типа: 'Это просто "чудо" какое-то'
.Истина или ложь (boolean)
Или
true
или false
, всего 2 возможных значения. Обычно true
означает нечто положительное, а false
— нечто отрицательное. Да/нет, включено/выключено, в наличии/отсутвует и так далее.Массивы (array)
Массив или список — это набор значений, разделенных запятыми, заключенный в квадратные скобки:
[1, 2, 3]
, ["a", "b", "c"]
и т.д.Массив может содержать значения разных типов:
[1, "b", false]
, включая вложенные массивы: [1, [12, 13], ["a", "b"]]
.Объекты (object)
Объект — это набор пар ключ-значение, разделенных запятыми, заключенный в фигурные скобки. Значение может быть любого типа, а ключем может быть только строка. Между ключем и значением всегда ставится двоеточие:
{"x": 12, "y": 44}
, {"type": "house", "price": 1200}
и т.д.Если в названии ключа используются только латинские буквы, цифры (но не в самом начале) и символ
_
, то ключ можно не заключать в скобки: {name: "Hohn", age: 34}
.Как и массивы, объекты могут содержать другие вложенные объекты. Ключи в объекте не должны повторяться, но если такое случается, то “верным” значением считается последнее. То есть в объекте
{x: 1, x: 2}
значением ключа x
будет 2
.Даты (date)
Даты записываются между двумя знаками
#
, в формате “год-месяц-день”: #2022-04-22#
, #1994-05-04#
и т.д. Ведущий ноль обязателен, то есть #1994-5-4#
это уже неправильный формат.Дата может включать так же и время:
#2022-04-22 14:05#
#2022-04-22 14:05:15#
(с секундами)#2022-04-22 14:05:15.245#
(с миллисекундами)Если не указано иное, то по умолчанию используется время по Гринвичу. Можно дополнительно указать и часовой пояс:
#2022-04-22 14:30 +05#
(Нью-Йорк)#2022-04-22 14:30 -03#
(Москва)Можно указать часовой пояс, опустив время:
#2022-04-22 -03#
(00:00 по Москве)Больше примеров
Тип null (null)
Означает отсутствующее значение. Единственным возможным значением этого типа данных является
null
.Переменные
Переменные обеспечивают доступ к значениям, которые могут меняться. Переменная может содержать значение любого типа — число, объект, массив, дату и т.д.
Название переменной может содержать латинские буквы, цифры и знак “_”, но не может начинаться с цифры. Несколько примеров названий переменных:
member_id
, url
, test123
.Есть возможность объявлять переменные для использования внутри формулы.
Пример
В значениях переменных так же можно использовать формулы. Общий синтаксис такой:
javascriptназвание_переменной = формула; название_переменной2 = формула; ... формула
Доступ к элементам массива
Если в переменной хранится массив, доступ к элементам осуществляется следующим образом:
array[0]
, где 0
это номер элемента.Обратите внимание, что нумерация начинается с 0! Первый элемент, это элемент под номером 0, второй элемент под номером 1 и так далее.
Допустим, у нас есть переменная
prices
, содержащая массив [25, 33, 11]
. Получить второе значение массива можно следующим образом: prices[1]
.Так же есть удобный способ получения последнего элемента:
prices[-1]
, то есть при использовании отрицательного номера, элементы считаются с конца.Доступ к значениям объекта
Похожим образом осуществляется и доступ к значениям объекта, только вместо номера в квадратных скобках мы передаем строку:
object["a"]
, где "a"
это ключ.Допустим, у нас есть переменная
man
, которая содержит объект { "firts name": "John", "age": 34 }
. Получить значение “first name” этого объекта можно следующим образом: man["first name"]
.А так получаем значение “age”:
man["age"]
. Если ключ содержит только латинские буквы, цифры и символ “_”, то синтаксис можно упростить: man.age
.Комментарии
В код формулы можно вставлять комментарии двумя способами.
Первый — конструкция
/* комментарий */
, которая может быть многострочной, а может занимать только часть строки.Пример:
javascriptmyDate + /* сутки */ 86400000
Часть кода
/* сутки */
будет проигнорирована при выполнении формулы.Второй — конструкция
// комментарий
, которая превращает в комментарий всю оставшуюся часть строки, и которую удобно использовать при перечислении элементов массива или значений объектов.Пример:
javascriptsum([ 10, 20, // 30, 40, ])
В данном случае мы “закомментировали” третий элемент массива, и он не будет учитываться при сложении.
Операторы
Оператор — это простейшая конструкция языка.
Сложение и вычитание:
+
, -
Умножение и деление:
*
, /
Операторы сравнения:
==
, !=
, >
, >=
, <
, <=
Остаток от деления:
%
Объединение строк:
&
Логический оператор
and
Логический оператор
or
Значение по умолчанию:
??
Значение или null:
?
Наличие элемента в массиве:
in
Функции
Есть 2 способа вызвать функцию для работы со значением.
Первый — передать значение в качестве первого аргумента функции:
javascriptlocate('Hello, world!', 'Hello')
Второй — выполнить функцию над значением через точку:
javascript'Hello, world!'.locate('Hello')
Оба способа эквивалентны.
Математические функции
sum(numbers) — складывает все числа в массиве.
multiply(numbers) — умножает между собой все числа в массиве.
abs(number) — возвращает абсолютное значение числа.
round(number, precision?) — округляет число с заданной точностью.
trunc(number, precision?) — отсекает дробную часть с заданной точностью.
floor(number) — округляет число вниз.
ceil(number) — округляет число вверх.
random() — генератор случайных чисел.
min(numbers) — возвращает минимальное значение из списка.
max(numbers) — возвращает максимальное значение из списка.
pow(number, exponent) — возводит число в указанную степень.
sqrt(number) — возвращает квадратный корень числа.
log(number, base) — возвращает логарифм числа.
exp(number) — возвращает значение выражения «E в степени number»
Тригонометрия: acos, acosh, asin, asinh, atan2, atan, atanh, cos, cosh, sin, sinh, tan, tanh
Работа с текстом
length(string) — возвращает количество символов.
locate(string, substring, start?) — возвращает позицию первого вхождения подстроки.
substr(string, start, count?) — возвращает подстроку.
join(strings, separator?) — объединяет все элементы массива в одну строку.
trim(string) — удаляет пробельные символы с начала и конца строки.
trimStart(string) — удаляет пробельные символы с начала.
trimEnd(string) — удаляет пробельные символы с конца строки.
split(string, separator) — разделяет строку на подстроки с помощью разделителя.
replace(string, find, replacement) — осуществляет замену первой найденной подстроки на заданную.
replaceAll(string, find, replacement) — осуществляет замену всех найденных подстрок на заданную.
lower(string) — преобразовывает строку в строчные буквы (нижний регистр).
upper(string) — преобразовывает строку в заглавные буквы (верхний регистр).
Массивы (списки)
count(array) — возвращает количество элементов в массиве.
range(start, end, step?) — генерирует массив из чисел заданной длины.
map(array, expression) — выполняет преобразование каждого элемента массива.
merge(array1, array2, …) — объединяет несколько массивов в один.
reduce(array, expression, initialValue) — выполняет преобразование каждого элемента массива, возвращая одно результирующее значение.
reverse(array) — возвращает массив с элементами, переставленными в обратном порядке.
filter(array, expression) — удаляет элементы массива, не соответствующие условию.
sort(array, expression?) — сортирует элементы массива в порядке возрастания.
slice(array, start, count?) — обрезает массив, возвращая часть исходного.
unique(array) — оставляет только уникальные значения массива.
indexOf(array, expression) — возвращает номер элемента в массиве
Объекты
arrayToObject(array) — преобразует массив в объект.
objectToArray(object) — преобразует объект в массив.
Дата и время
now() — текущая дата и время.
dateAdd(date, unit, amount) — прибавляет к дате указанное количество единиц.
dateSubtract(date, unit, amount) — вычитает из даты указанное количество единиц.
См. также toDate
Логические функции
if(condition, then, else) — условный оператор.
not(value) — возвращает true вместо false и наоборот.
let(variables, expression) — присваивает имена результатам вычислений.
Типы данных
type(value) — возвращает тип значения: number, string, boolean, array, object, data или null.
toBoolean(value) — преобразует значение в тип boolean (true или false).
toNumber(value) — преобразует значение в число.
toString(value) — преобразует значение в строку.
toDate(value) — преобразует значение в дату.
exists(value) — проверяет существование значения.