---
page_title: Expressions - Configuration Language
description: >-
  An overview of expressions to reference or compute values in Terraform
  configurations, including types, operators, and functions.
---

# Expressions

> **Hands-on:** Try the [Create Dynamic Expressions](https://learn.hashicorp.com/tutorials/terraform/expressions?in=terraform/configuration-language&utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS) tutorial.

_Expressions_ refer to or compute values within a configuration.
The simplest expressions are just literal values, like `"hello"` or `5`,
but the Terraform language also allows more complex expressions such as
references to data exported by resources, arithmetic, conditional evaluation,
and a number of built-in functions.

Expressions can be used in a number of places in the Terraform language,
but some contexts limit which expression constructs are allowed,
such as requiring a literal value of a particular type or forbidding
[references to resource attributes](/language/expressions/references#references-to-resource-attributes).
Each language feature's documentation describes any restrictions it places on
expressions.

You can experiment with the behavior of Terraform's expressions from
the Terraform expression console, by running
[the `terraform console` command](/cli/commands/console).

The other pages in this section describe the features of Terraform's
expression syntax.

- [Types and Values](/language/expressions/types)
  documents the data types that Terraform expressions can resolve to, and the
  literal syntaxes for values of those types.

- [Strings and Templates](/language/expressions/strings)
  documents the syntaxes for string literals, including interpolation sequences
  and template directives.

- [References to Values](/language/expressions/references)
  documents how to refer to named values like variables and resource attributes.

- [Operators](/language/expressions/operators)
  documents the arithmetic, comparison, and logical operators.

- [Function Calls](/language/expressions/function-calls)
  documents the syntax for calling Terraform's built-in functions.

- [Conditional Expressions](/language/expressions/conditionals)
  documents the `<CONDITION> ? <TRUE VAL> : <FALSE VAL>` expression, which
  chooses between two values based on a bool condition.

- [For Expressions](/language/expressions/for)
  documents expressions like `[for s in var.list : upper(s)]`, which can
  transform a complex type value into another complex type value.

- [Splat Expressions](/language/expressions/splat)
  documents expressions like `var.list[*].id`, which can extract simpler
  collections from more complicated expressions.

- [Dynamic Blocks](/language/expressions/dynamic-blocks)
  documents a way to create multiple repeatable nested blocks within a resource
  or other construct.

- [Type Constraints](/language/expressions/type-constraints)
  documents the syntax for referring to a type, rather than a value of that
  type. Input variables expect this syntax in their `type` argument.

- [Version Constraints](/language/expressions/version-constraints)
  documents the syntax of special strings that define a set of allowed software
  versions. Terraform uses version constraints in several places.
