Spec-Zone.ru › OpenTofu 1.12

Арифметические и логические операторы

Оператор — это тип выражения, который преобразует или объединяет одно или несколько других выражений. Операторы либо объединяют два значения определённым образом, чтобы получить третье значение-результат, либо преобразуют заданное значение, чтобы получить одно результирующее значение.

Операторы, работающие с двумя значениями, размещают символ оператора между этими значениями, как в математической записи: 1 + 2. Операторы, работающие только с одним значением, размещают символ оператора перед этим значением, например !true.

В языке OpenTofu есть набор арифметических и логических операторов, похожих на операторы в таких языках программирования, как JavaScript или Ruby.

Если в выражении используется несколько операторов, они вычисляются в следующем порядке:

  1. !, - (умножение на -1)
  2. *, /, %
  3. +, - (вычитание)
  4. >, >=, <, <=
  5. ==, !=
  6. &&
  7. ||

Используйте скобки, чтобы изменить порядок вычислений по умолчанию. Без скобок сначала вычисляются операторы с более высоким приоритетом, поэтому 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 в противном случае.

Логические операторы​

Все логические операторы принимают значения bool и возвращают значения bool.

  • 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 v1.10 и более поздних версиях логические операторы OpenTofu работают с вычислением по короткой схеме: это означает, что var.foo == null || var.foo.bar == 1 не приведёт к сообщению об ошибке, если var.foo равно null, поскольку var.foo.bar не вычисляется. Любое пропущенное выражение по-прежнему проходит статическую проверку, например проверку того, существует ли блок variable "foo", на который ссылается var.foo.

Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/language/expressions/operators/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API