Для объявления переменных и задания им определенных значений используется блок «Инициализация переменной».
А для записи математических вычислений — блок «Выражение».
Также математические выражения, в том числе и изменяющие значения переменных, могут встречаться почти везде, где можно указать какое-либо значение.
Блоки и их свойства, не допускающие использования математических выражений, описаны в разделе «Общие блоки».
Все переменные в программе являются глобальными, т.е. их значения могут использоваться в любом блоке в программе.
Используемый внутри блоков язык создан на базе Lua 5.3 и во многом следует его синтаксису. Тем не менее имеются существенные отличия, поэтому полное описание используемого в TRIK Studio языка приводится здесь.
Объявление нескольких переменных в одном блоке «Выражение»:
То же через блоки «Инициализация переменной»:
Пропорциональный регулятор для езды по линии с использованием двух датчиков света для платформы ТРИК:
Пример использования массивов для задания портов блока «Моторы вперёд». Создаётся массив с именем a
, нулевому элементу присваивается порт M3
, первому — M1
, потом содержимое первого элемента массива меняется на M4
, затем получившийся массив передаётся в свойство «Порты» блока «Моторы вперёд»:
В отличие от Lua язык TRIK Studio статически типизирован, то есть тип каждого выражения и каждой переменной должен быть известен во время компиляции. При этом язык не требует (и даже не позволяет!) явно писать типы переменных. Используется автоматический вывод типов по использованию переменных.
Например, по выражению a = 1
среда «поймёт», что тип a
— целое.
Тип
Описание
Булевый (логический) тип
Принимает значения true (истина) и false (ложь).
Вещественное число
Использует 64-битное представление binary64 стандарта IEEE 754 (позволяет хранить значения до 1.7E+308).
Целое число
Использует 32-битное знаковое представление (позволяет хранить значения от -2 147 483 648 до 2 147 483 647).
Строка
Позволяет хранить символьные строки произвольной длины в кодировке UTF-8.
Нулевой тип
Имеет только одно значение nil и означает отсутствие «настоящего» значения.
Позволяет хранить произвольное количество значений произвольного (но для каждого значения в одном массиве одинакового) типа, в том числе и другие массивы, и обращаться к значениям по индексу.
О синтаксисе выражений в блоках читайте в статье
Синтаксис выражений в блокахМассив — один из типов языка TRIK Studio, хранящий набор значений (элементов массива), идентифицируемых по индексу. Нумерация индексов в массиве начинается с 0.
Массивы можно создавать явно, используя следующие выражения (варианты записи равносильны):
Или с явным указанием индексов:
Можно использовать массивы, не создавая их. Например, так:
При этом «пустые места» в массиве (индексы, которым не было явного присваивания) будут заполнены значениями по умолчанию:
0
— для целых и вещественных;
false
— для булевых;
пустыми строками для строковых массивов.
Значения массива также могут использоваться без фигурных скобок, если используются в качестве возвращаемого значения. Например, данное выражение вернёт массив из чисел 1
и 2
:
Сделано это для того, чтобы интерпретировать перечисления значений (например, порты моторов в блоке «Моторы вперёд») как массивы. Поэтому везде, где используется запись значений через запятую, можно использовать массив.
Язык использует пробелы, табуляции и переводы строк вне строковых литералов только как разделители между лексемами — влияния на интерпретацию выражений они не оказывают.
В языке есть следующие ключевые слова:
and
false
nil
not
or
true
И следующие операторы:
Строковые литералы пишутся либо в одинарных, либо в двойных кавычках. Например,
Целые числа пишутся либо в десятичной, либо в восьмеричной, либо в шестнадцатеричной системе. Шестнадцатеричные числа начинаются с префикса 0x
, восьмеричные — с префикса 0
. Например,
3
, 345
— десятичные числа
0xff
, 0xBEBADA
— шестнадцатеричные числа
07654321
— восьмеричное число
Вещественные числа пишутся либо в общепринятой, либо в экспоненциальной форме. Например,
Комментарии начинаются с --
и продолжаются до конца строки. Например,
О синтаксисе выражений в блоках читайте в статье
Синтаксис выражений в блокахTitle
Title
Title
+
Сложение
Применимо к вещественным и целым значениям. Результат целый,
если оба аргумента целые, иначе вещественный.
-
Вычитание
Применимо к вещественным и целым значениям. Результат целый, если оба аргумента целые, иначе вещественный.
*
Умножение
Применимо к вещественным и целым значениям. Результат целый, если оба аргумента целые, иначе вещественный.
/
Деление
Применимо к вещественным и целым значениям. Результат вещественный.
//
Целочисленное деление
Применимо к целым значениям. Результат целый.
^
Возведение в степень
Применимо к вещественным и целым значениям. Результат вещественный.
%
Остаток от деления
Применим к целым значениям. Результат целый.
&
Побитовое «и»
Применимо к целым значениям. Результат целый.
|
Побитовое «или»
Применимо к целым значениям. Результат целый.
>>, <<
Побитовые сдвиги вправо и влево
Применимы к целым значениям. Результат целый.
..
Конкатенация
Применим к строковым значениям. Результат — строка.
>=, >, <, <=
Операции сравнения
Применимы к целым и вещественным значениям. Результат булевый.
==
Операция проверки равенства
Применима к значениям любых типов. Результат булевый.
~=, !=, '~=', '!='
Операция проверки неравенства
Применима к значениям любых типов. Результат булевый. Альтернативные способы записи операции не различаются по смыслу.
and, &&
Логическое «и»
Применимо к целым, вещественным и булевым значениям. Результат булевый. Альтернативные способы записи операции по смыслу не различаются.
or, ||
Логическое «или»
Применимо к целым, вещественным и булевым значениям. Результат булевый. Альтернативные способы записи операции по смыслу не различаются.
Title
Title
Title
-
Арифметический унарный минус
Применим к целым и вещественным значениям. Результат целый или вещественный (в зависимости от типа аргумента).
~
Побитовое «не»
Применимо к целым значениям. Результат целый.
not
Логическое «не»
Применимо к булевым, целым, вещественным и строковым значениям, результат булевый (0 или пустая строка считается false, всё остальное — true).
#
Оператор взятия длины
Применим к строковым значениям. Результат целый.
Имеет следующий вид:
переменная1, переменная2, …, переменнаяN = выражение1, выражение2, …, выражениеN
В самом простом виде переменная = выражение
.
Записывается как обычное выражение и должен находиться в конце блока операторов.
Записывается как ;
.
Блок операторов с двумя операторами присваивания и оператором возврата значения:
В TRIK Studio сейчас только одна встроенная константа. С ней можно работать так же, как и с сенсорными переменными, но ее значение не меняется.
pi
3.14159265358979
Представляет отношение длины окружности к ее диаметру, определяемое константой π.
Кроме констант, в TRIK Studio доступны зарезервированные переменные, которые хранят значения показаний сенсоров, подключенных к соответствующим портам.
Эти значения можно присваивать переменным и использовать в математических выражениях.
Переменные имеют вид
Например, sensorA1
для ТРИК или sensor1
для Lego NXT.
Полный список сенсорных переменных приводится в разделах к конкретным платформам:
ТРИК.
В математических выражениях можно использовать функции, доступные для любой платформы.
Функция
Описание
time()
Возвращает время в миллисекундах с начала работы программы.
sin(angle)
Синус угла, где «angle» — угол в радианах.
cos(angle)
Косинус угла, где «angle» — угол в радианах.
ln(a)
Натуральный логарифм, где «a» — число.
exp(a)
Экспонента («e» в степени аргумента «a»).
asin(a)
Арксинус, где «a» — число.
acos(a)
Арккосинус, где «a» — число.
atan(a)
Арктангенс, где «a» — число.
atan2(a1, a2)
Арктангенс от a1/a2 c проверкой деления на 0.
sgn(a)
Знак. Возвращает 1, если аргумент «a» положительный, -1, если отрицательный, и 0, если аргумент равен нулю.
sqrt(a)
Квадратный корень аргумента «a». В случае если аргумент отрицательный, переменной будет присвоено значение «NaN» (Not A Number).
abs(a)
Модуль аргумента «a».
ceil(a)
Округляет переданный аргумент «a» до целого в большую сторону.
floor(a)
Округляет переданный аргумент «a» до целого в меньшую сторону.
random(a)
Случайное число в интервале от 0 до переданного аргумента «a».