Арифметические и логические операторы
Оператор — это тип выражения, который преобразует одно или несколько других выражений или объединяет их. Операторы либо каким-либо образом объединяют два значения, чтобы получить третье результирующее значение, либо преобразуют заданное значение, чтобы получить результат.
Операторы, работающие с двумя значениями, располагают символ оператора между этими значениями, как в математической записи: 1 + 2. Операторы, работающие только с одним значением, располагают символ оператора перед этим значением, например !true.
В языке OpenTofu есть набор арифметических и логических операторов, похожих на операторы в таких языках программирования, как JavaScript или Ruby.
Если в выражении используются несколько операторов, они вычисляются в следующем порядке:
-
!,-(умножение на-1) -
*,/,% -
+,-(вычитание) -
>,>=,<,<= -
==,!= &&||
Используйте скобки, чтобы изменить стандартный порядок операций. Без скобок сначала будут вычисляться операции более высокого уровня, поэтому OpenTofu интерпретирует 1 + 2 * 3 как 1 + (2 * 3), а не как (1 + 2) * 3.
Операторы можно разделить на несколько групп со схожим поведением, описанных ниже. Каждая группа операторов ожидает, что заданные значения будут иметь определённый тип. OpenTofu попытается автоматически преобразовать значения к требуемому типу или выдаст сообщение об ошибке, если автоматическое преобразование невозможно.
Арифметические операторы
Все арифметические операторы принимают числовые значения и возвращают числовые результаты:
-
a + bвозвращает результат сложенияaиb. -
a - bвозвращает результат вычитанияbизa. -
a * bвозвращает результат умноженияaнаb. -
a / bвозвращает результат деленияaнаb. -
a % bвозвращает остаток от деленияaнаb. Этот оператор обычно полезен только при работе с целыми числами. -
-aвозвращает результат умноженияaна-1.
Для некоторых других, менее распространённых числовых операций в OpenTofu предусмотрены функции. Например, вычислять степени можно с помощью функции pow.
Операторы равенства
Оба оператора равенства принимают два значения любого типа и возвращают логические значения.
-
a == bвозвращаетtrue, еслиaиbимеют одинаковый тип и одинаковое значение, иfalseв противном случае. -
a != bпротивоположен операторуa == b.
Поскольку для проверки равенства операторы равенства требуют, чтобы оба аргумента имели в точности один и тот же тип, мы рекомендуем использовать их только со значениями примитивных типов либо применять явные функции преобразования типов, чтобы указать тип, который вы хотите использовать для сравнения.
Сравнение структурных типов может привести к неожиданным результатам, если типы аргументов вам неизвестны. Например, может показаться, что var.list == [] вернёт true, если var.list — пустой список, но на самом деле [] создаёт значение типа tuple([]), поэтому эти два значения никогда не совпадут. В такой ситуации часто понятнее написать length(var.list) == 0.
Операторы сравнения
Все операторы сравнения принимают числовые значения и возвращают логические значения.
-
a < bвозвращаетtrue, еслиaменьшеb, иfalseв противном случае. -
a <= bвозвращаетtrue, еслиaменьше или равноb, иfalseв противном случае. -
a > bвозвращаетtrue, еслиaбольшеb, иfalseв противном случае. -
a >= bвозвращаетtrue, еслиaбольше или равноb, иfalseв противном случае.
Логические операторы
Все логические операторы принимают логические значения и возвращают логические значения.
-
a || bвозвращаетtrue, еслиaилиbравноtrue, либоfalse, если оба равныfalse. -
a && bвозвращаетtrue, если иa, иbравныtrue, либоfalse, если одно из них равноfalse. -
!aвозвращаетtrue, еслиaравноfalse, иfalse, еслиaравноtrue.
В OpenTofu нет оператора для операции «исключающее ИЛИ». Если вы знаете, что оба операнда являются логическими значениями, исключающее ИЛИ эквивалентно оператору != («не равно»).
Логические операторы в OpenTofu не используют вычисление по короткой схеме. Это значит, что var.foo || var.foo.bar приведёт к сообщению об ошибке, если var.foo равно null, поскольку вычисляются и var.foo, и var.foo.bar.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.10/language/expressions/operators/