# Evaluación de expresiones en Bake


Los archivos de Bake en formato HCL admiten la evaluación de expresiones, lo que te permite realizar operaciones aritméticas, establecer valores de forma condicional y más.

## Operaciones aritméticas

Puedes realizar operaciones aritméticas en las expresiones. El siguiente ejemplo muestra cómo multiplicar dos números.

```hcl {title=docker-bake.hcl}
sum = 7*6

target "default" {
  args = {
    answer = sum
  }
}
```

Imprimir el archivo de Bake con la bandera `--print` muestra el valor evaluado para el argumento de compilación `answer`.

```console
$ docker buildx bake --print
```

```json
{
  "target": {
    "default": {
      "context": ".",
      "dockerfile": "Dockerfile",
      "args": {
        "answer": "42"
      }
    }
  }
}
```

## Operadores ternarios

Puedes utilizar operadores ternarios para registrar un valor de forma condicional.

El siguiente ejemplo añade una etiqueta (tag) solo cuando una variable no está vacía, utilizando la [función](/build/bake/funcs/) integrada `notequal`.

```hcl {title=docker-bake.hcl}
variable "TAG" {}

target "default" {
  context="."
  dockerfile="Dockerfile"
  tags = [
    "my-image:latest",
    notequal("",TAG) ? "my-image:${TAG}": ""
  ]
}
```

En este caso, `TAG` es una cadena vacía, por lo que la configuración de compilación resultante solo contiene la etiqueta fija `my-image:latest`.

```console
$ docker buildx bake --print
```

```json
{
  "target": {
    "default": {
      "context": ".",
      "dockerfile": "Dockerfile",
      "tags": ["my-image:latest"]
    }
  }
}
```

## Expresiones con variables

Puedes usar expresiones con [variables](/build/bake/variables/) para establecer valores de forma condicional o para realizar operaciones aritméticas.

El siguiente ejemplo utiliza expresiones para establecer valores basándose en el valor de las variables. El argumento de compilación `v1` se establece en "higher" si la variable `FOO` es mayor que 5, de lo contrario se establece en "lower". El argumento de compilación `v2` se establece en "yes" si la variable `IS_FOO` es verdadera (true), de lo contrario se establece en "no".

```hcl {title=docker-bake.hcl}
variable "FOO" {
  default = 3
}

variable "IS_FOO" {
  default = true
}

target "app" {
  args = {
    v1 = FOO > 5 ? "higher" : "lower"
    v2 = IS_FOO ? "yes" : "no"
  }
}
```

Imprimir el archivo de Bake con la bandera `--print` muestra los valores evaluados para los argumentos de compilación `v1` y `v2`.

```console
$ docker buildx bake --print app
```

```json
{
  "group": {
    "default": {
      "targets": ["app"]
    }
  },
  "target": {
    "app": {
      "context": ".",
      "dockerfile": "Dockerfile",
      "args": {
        "v1": "lower",
        "v2": "yes"
      }
    }
  }
}
```

