Арифметические и логические операторы
Оператор — это тип выражения, который преобразует или объединяет одно или несколько других выражений. Операторы либо некоторым образом объединяют два значения, чтобы получить третье результирующее значение, либо преобразуют одно заданное значение, чтобы получить одно результирующее значение.
Операторы, работающие с двумя значениями, помещают символ оператора между ними, как в математической записи: 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.9/language/expressions/operators/