# Referencia rápida del lenguaje de expresiones

Los placeholders `{{ }}` y las condiciones `when:` son expresiones [expr-lang](https://expr-lang.org/docs/language-definition). Funciones útiles para autores de plantillas:

| Categoría | Funciones / operadores |
| --- | --- |
| Cadenas | `split(s, sep)` · `join(list, sep)` · `upper(s)` · `lower(s)` · `trim(s)` · `replace(s, old, new)` · `contains(s, sub)` · `startsWith(s, pre)` · `endsWith(s, suf)` · `s matches "patrón-re2"` |
| Colecciones | `x in list` · `len(list)` · `list[i]` · `first(list)` · `last(list)` · `filter(list, pred)` · `map(list, expr)` · `all`/`any`/`none(list, pred)` · `sort(list)` · `uniq(list)` · `concat(a, b)` |
| Lógica y nil | `a ?? "default"` (coalescencia de nil) · `obj?.field` (encadenamiento opcional) · `cond ? a : b` (ternario) · `'clave' in map` (presencia de clave) |
| Números | `+ - * / %` · `abs(x)` · `min`/`max(a, b)` · `sum(list)` · `avg(list)` · `int(x)` · `float(x)` · `string(x)` |
| JSON | `toJSON(x)` · `fromJSON(s)` |

En los predicados de `filter`/`map`/`all`/`any`/`none` el elemento actual es `#` (p. ej. `filter(filesystems, #.pct > 90)`).

**No confundas lenguajes:** el `filter.expression` de la tarea **no** es expr — es jq (vía gojq) o una regexp RE2, según `filter.type`. expr solo se usa dentro de `{{ }}` y en `when:`.

---