# Funções Double Braces

Você pode usar funções Double Braces para manipular dados em um *pipeline*.

## Sintaxe

As funções Double Braces são usadas entre dois conjuntos de chaves e um espaço em branco, com o nome da função seguido por uma lista de parâmetros entre parênteses, como abaixo:

```
{{ NOMEDAFUNÇÃO(param1, param2) }}
```

Funções Double Braces são *case-insensitive*, isto é, não diferenciam entre letras maiúsculas e minúsculas. Entretanto, nós recomendamos como uma melhor prática escrevê-las com letras maiúsculas.

## Funções aninhadas

Você pode fazer chamadas a funções Double Braces dentro de outras funções, como abaixo:

```
{{ FUNÇÃOEXTERNA(FUNÇÃOINTERNA(param1, param2), param3) }}
```

Quando usa essa sintaxe, as funções são executadas de dentro para fora. Isto é, no exemplo acima, `FUNÇÃOINTERNA` é executada primeiro e seu *output* é usado como um parâmetro de `FUNÇÃOEXTERNA`, que é executada por último.

Diferentemente das linguagens de programação, as expessões Double Braces executam todas as funções ao mesmo tempo, independentemente se a condição do IF é `true` ou `false`. Isso difere das linguagens de programação, que normalmente executam as funções somente após checar a condição do IF.

#### Exemplo

**Input**

```
{
    "date": "2022-10-26T03:00:00Z"
}
```

**Expressão Double Braces**

```
{
    "format": {{ IF(EQUALTO(SIZE(message.date),20),FORMATDATE( message.date, "yyyy-MM-dd'T'HH:mm:ss'Z'", "dd/MM/yyyy"),FORMATDATE( message.date, "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "dd/MM/yyyy")) }}
}
```

**Output**

```
{
  "success": false,
  "message": "Encountered a configuration error while generating JSON",
  "error": "com.digibee.pipelineengine.exception.PipelineEngineConfigurationException: com.digibee.doublebraces.service.DoubleBracesConfigurationException: Syntax error parsing double braces expression {{ IF(EQUALTO(SIZE(message.date),20),FORMATDATE( message.date, \"yyyy-MM-dd'T'HH:mm:ss'Z'\", \"dd/MM/yyyy\"),FORMATDATE( message.date, \"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\", \"dd/MM/yyyy\")) }}: Could not parse date/time evaluating function FORMATDATE. Error: Text '2022-10-26T03:00:00Z' could not be parsed at index 19"
}
```

## Lista de funções

Abaixo, listamos as funções Double Braces por grupos baseados em seu uso.

### DE COMPARAÇÃO <a href="#de-comparao" id="de-comparao"></a>

Usadas para comparar *inputs* booleanos. Para saber mais, leia o artigo [Funções de Comparação](https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces/double-braces-functions/comparison-functions):

* AND
* NOT
* OR
* XOR

### NUMÉRICAS <a href="#numricas" id="numricas"></a>

Usadas para manipular valores numéricos. Para saber mais, leia o artigo [Funções Numéricas](https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces/double-braces-functions/numerical-functions):

* FORMATNUMBER
* TODOUBLE
* TOINT
* TOLONG
* TONUMBER
* RANDOMNUMBERS

### CONDICIONAIS <a href="#condicionais" id="condicionais"></a>

As funções desse grupo retornam um valor de acordo com um critério específico. Para saber mais, leia o artigo [Funções Condicionais](https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces/double-braces-functions/conditional-functions):

* EQUALTO
* GREATERTHAN
* GREATERTHANEQUAL
* IF
* LESSTHAN
* LESSTHANEQUAL
* ISOBJECT
* ISARRAY
* ISBOOLEAN
* ISSTRING
* ISNUMBER
* ISNULL
* SWITCHCASE
* ISABSENT

### DE DATA <a href="#de-data" id="de-data"></a>

Usadas para manipular datas. Para saber mais, leia o artigo [Funções de Data](https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces/double-braces-functions/date-functions):

* FORMATDATE
* NOW
* SUMDATE
* TOISODATE
* DIFFDATE

### DE ARQUIVO <a href="#de-arquivo" id="de-arquivo"></a>

Usadas para consultar metadados e validar arquivos. Para saber mais, leia o artigo [Funções de Arquivo](https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces/double-braces-functions/file-functions):&#x20;

* FILEEXISTS
* FILESIZE

### DE JSON <a href="#de-json" id="de-json"></a>

Usadas para manipular objetos JSON. Para saber mais, leia o artigo [Funções de JSON](https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces/double-braces-functions/json-functions):

* JSONPATH
* TOJSON
* UNESCAPEJSON
* GETELEMENTAT
* LASTELEMENT
* REMOVEAT
* NEWEMPTYOBJECT
* NEWEMPTYARRAY
* PUSH
* POP
* CARDINALITYONE
* CARDINALITYMANY

### MATEMÁTICAS <a href="#matemticas" id="matemticas"></a>

Usadas para fazer operações matemáticas. Para saber mais, leia o artigo [Funções Matemáticas](https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces/double-braces-functions/math-functions):

* ABS
* CEIL
* DIVIDE
* LOG
* MAX
* MIN
* MOD
* MULTIPLY
* POW
* ROUND
* SQRT
* SUBTRACT
* SUM

### DE STRING <a href="#de-string" id="de-string"></a>

Usadas para manipular *strings*. Para saber mais, leia o artigo [Funções de String](https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces/double-braces-functions/string-functions):

* CAPITALIZE
* CONCATWITHOUTTAB
* CONCAT
* ESCAPE
* FUZZYMATCH
* INDEXOF
* JOIN
* LASTINDEXOF
* LEFTPAD
* LOWERCASE
* MATCHES
* NORMALIZE
* REPLACE
* RIGHTPAD
* SPLIT
* SUBSTRING
* TOSTRING
* UPPERCASE
* CONTAINS
* DEFAULT
* UNESCAPE
* TRIM
* STRINGMATCHES
* RANDOMSTRINGS

### DE UTILIDADE <a href="#de-utilidades" id="de-utilidades"></a>

Usadas para fazer operações que não se encaixam nas outras categorias. Para saber mais, leia o artigo [Funções de Utilidade](https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces/double-braces-functions/utilities-functions):&#x20;

* BASEDECODE
* BASEENCODE
* UUID
* TOBOOLEAN
* SIZE
* BASEURLDECODE
* BASEURLENCODE
* URIDECODE
* URIENCOD
