Основные понятия и элементы
Операторы
Действующие операторы перечислены ниже в порядке убывания приоритетности исполнения.
-
Унарный минус
+
Унарный плюс
~
Побитовое неравенство NOT
!
Логическое NOT
Ни один из этих операторов не может быть использован со строковыми операндами, а побитовое NOT может использоваться только с целыми числами.
*
Умножить
/
Разделить
%
Остаток деления
Ни один из этих операторов не может быть использован со строковыми операндами, а оператор остатка может использоваться только для целых чисел.
+ -
Сложение и вычитание
Могут использоваться для любых числовых операндов.
<< >>
Сдвиг влево и вправо. Операторы можно использовать только с целыми числами. Сдвиг вправо также сдвигает и знаковый бит.
< > <= >=
Операторы булевой алгебры: меньше, больше, не больше, не меньше. Каждый оператор дает результат 1, если неравенство верно, и 0 — в обратном случае. Кроме числовых операндов, операторы можно применять для строковых выражений, в этом случае выполняется сравнение строк.
== !=
Булевские операторы: равно и не равно. Результат операции — число 0 или 1. Операторы можно применять с любыми аргументами.
&
Оператор побитового AND. Используется только с целыми операндами.
^
Оператор побитового исключающего OR. Применяется только с целыми числами.
|
Оператор побитового OR. Применяется только с целыми числами.
&&
Оператор логического AND. Результат равен 1, если оба операнда равны 1, и 0 — в обратном случае. Операндами могут быть любые числа, как целые, так и с плавающей запятой.
||
Оператор логического OR. Результат равен 0, если оба операнда равны 0, и 1 — в обратном случае. Операндами могут быть любые числа, как целые, так и с плавающей запятой.
x?y:z
Конструкция if-then-else, подобная аналогичной конструкции в языке С. Операнд х должен иметь числовое значение. Если значение х не равно нулю, то результат команды будет у. В обратном случае результат будет z.
Операторы одного уровня приоритета исполнения выполняются по очереди, слева направо. Например, команда:
ехрг 4*2 < 7
возвращает результат 0.
Подобно языку С, операторы &&, || и ?: имеют свойство «ленивого вычисления», т.е., если операнд не нужен для получения результата, то он не вычисляется. Например, в команде:
ехрг {$v? [а] : [b]}
будет вычислено только одно из выражений [а] и [b], в зависимости от значения $v. Однако, это справедливо только тогда, когда все выражение заключено в фигурные скобки. В противном случае анализатор Tcl сначала вычислит [а] и [b], и только потом вызовет команду ехрr.