Spec-Zone.ru › OpenTofu 1.9

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

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

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

Spec-Zone.ru

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