Spec-Zone.ru › OpenTofu 1.11

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

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

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

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

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

  • 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 == null || var.foo.bar == 1 не вызовет сообщение об ошибке, если var.foo равно null, поскольку var.foo.bar не вычисляется.

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

Spec-Zone.ru

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