# Fonctions

> Découvrez les rôles et catégories des fonctions pour manipuler et transformer les données.

https://docs.pandasuite.com/fr/essentials/data/functions/

**Les fonctions jouent un rôle clé dans la manipulation et la transformation des données dans PandaSuite. Elles permettent d'effectuer des opérations spécifiques sur différents types de données, tels que les nombres, les chaînes de caractères, les dates et les tableaux.**

## Comprendre le rôle des fonctions

Une fonction prend des paramètres qui déterminent son comportement. Ces paramètres indiquent sur quelles données la fonction doit agir et peuvent inclure des options spécifiques à l’opération. Une fois exécutée, la fonction retourne un résultat qui peut être utilisé dans l’application.

Un paramètre n'est pas forcément une valeur fixe : vous pouvez le saisir, ou le lier à une autre donnée. Pour le lier, cliquez sur son nom dans la [fenêtre de données](https://docs.pandasuite.com/fr/essentials/data/data-binding/), comme pour une propriété.

Vous pouvez lier, entre autres :

- l'**Index** de **By Index**
- l'**Identifiant** de **By Id** (un identifiant ou une Référence)
- la **Clé** de **By Key**
- le **Nombre** de **Add**, **Subtract**, **Multiply** ou **Divide**

Par exemple, si un nombre *level* du [Datastore](https://docs.pandasuite.com/fr/essentials/data/datastore/) vaut `2`, **By Index** dont l'**Index** est lié à *level* renvoie le troisième élément de la liste (le premier est à `0`).

Certaines fonctions ne sont compatibles qu’avec des types de données spécifiques. Par exemple, une fonction mathématique ne pourra pas être appliquée à une chaîne de caractères sans conversion préalable.

## Fonctions générales

### Evaluate

Compare la valeur d'entrée (le résultat des étapes placées avant elle dans la liaison) à une valeur.

**Paramètres :**

- **Fonction :** La comparaison à appliquer, choisie dans la même liste que celle du composant [Condition](https://docs.pandasuite.com/fr/essentials/components/condition/#fonctions-disponibles)
- **Valeur :** La valeur à laquelle comparer, saisie ou liée à une donnée

**Retourne :** Vrai ou faux

**Exemple :** Pour afficher un objet seulement quand un score dépasse 10, liez sa [Visibilité](https://docs.pandasuite.com/fr/essentials/layout/object-visibility/) au score, puis ajoutez **Evaluate** avec la fonction **Supérieur à** et la valeur `10`.

### By Key

Renvoie la valeur d'un élément à partir de sa clé.

**Paramètre :** Clé

**Retourne :** Valeur associée à la clé

### By Index

Renvoie la valeur d’un élément à partir de son index (le premier élément est indexé à 0).

**Paramètre :** Index

**Retourne :** Valeur à l'index donné

### By Id

Renvoie la valeur d'un élément à partir de son identifiant unique.

**Paramètre :** Identifiant (l'identifiant de l'élément sous forme de texte, ou une [Référence](https://docs.pandasuite.com/fr/essentials/data/data-types/#référence) vers cet élément)

**Retourne :** Valeur associée

---

## Fonctions mathématiques

Les fonctions mathématiques opèrent sur les types de données [Nombre](https://docs.pandasuite.com/fr/essentials/data/data-types/#nombre) et effectuent des opérations arithmétiques, trigonométriques et de formatage.

> **Info**
>
> 💡 Si vous utilisez la valeur d'un composant [Saisie de
> texte](https://docs.pandasuite.com/fr/essentials/components/text-input/), pensez à utiliser la fonction
> **Parse Number** pour convertir la valeur avant toute opération.

### Add

Ajoute un nombre à la valeur d'entrée.

**Paramètre :** Nombre à ajouter

**Exemple :** `10 + 5` retourne `15`

### Subtract

Soustrait un nombre de la valeur d'entrée.

**Paramètre :** Nombre à soustraire

**Exemple :** `10 - 3` retourne `7`

### Multiply

Multiplie la valeur d'entrée par un nombre.

**Paramètre :** Multiplicateur

**Exemple :** `10 × 3` retourne `30`

### Divide

Divise la valeur d'entrée par un nombre.

**Paramètre :** Diviseur

**Exemple :** `10 ÷ 2` retourne `5`

### Round

Arrondit au nombre entier le plus proche.

**Exemple :** `4.7` retourne `5`, `4.3` retourne `4`

### Floor

Renvoie le plus grand nombre entier inférieur ou égal à un nombre.

**Exemple :** `4.7` retourne `4`

### Ceil

Renvoie le plus petit nombre entier supérieur ou égal à un nombre.

**Exemple :** `4.3` retourne `5`

### Sqrt

Renvoie la racine carrée d'un nombre.

**Exemple :** `16` retourne `4`

### Cbrt

Renvoie la racine cubique d'un nombre.

**Exemple :** `27` retourne `3`

### Tan

Renvoie la tangente d'un angle en radians.

**Exemple :** `tan(π/4)` retourne `1`

### Cos

Renvoie le cosinus d'un angle en radians.

**Exemple :** `cos(0)` retourne `1`

### Sin

Renvoie le sinus d'un angle en radians.

**Exemple :** `sin(π/2)` retourne `1`

> **Astuce**
>
> 💡 Les fonctions trigonométriques attendent des angles en radians. Pour
> convertir des degrés en radians, multipliez par π/180.

### Pow

Renvoie un nombre élevé à une puissance donnée.

**Paramètres :**

- **Base :** Le nombre à élever
- **Exposant :** La puissance à laquelle élever

**Exemple :** `2^3` (2 à la puissance 3) retourne `8`

### Abs

Retourne la valeur absolue d'un nombre.

**Exemple :** `-5` retourne `5`

### Format Number

Renvoie un nombre dans le format demandé.

**Paramètres :**

- **Minimums (Fractions) :** le nombre minimal de décimales à utiliser
- **Maximums (Fractions) :** le nombre maximal de décimales à utiliser

> **Info**
>
> 💡 Découvrez le doc de référence :
> <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat>

### Parse Number

Convertit une chaîne de caractères en nombre.

### Parse Color

Transforme un nombre entier ou une chaîne de caractères en objet [Couleur](https://docs.pandasuite.com/fr/essentials/data/data-types/#couleur).

### Parse Coordinates

Analyse une chaîne de caractères contenant des coordonnées et renvoie un objet [Coordonnée](https://docs.pandasuite.com/fr/essentials/data/data-types/#coordonnée).

**Exemples de formats :** `"48.8566, 2.3522"` ou `"48.8566;2.3522"`

**Retourne :** Objet Coordonnée

Utile lors de la réception de données de coordonnées sous forme de chaînes depuis des API externes ou fichiers CSV.

---

## Fonctions sur le texte

Ces fonctions opèrent sur les types de données [Texte](https://docs.pandasuite.com/fr/essentials/data/data-types/#texte) pour la manipulation, le formatage et l'analyse de chaînes de caractères.

### Truncate

Limite le nombre de caractères dans un texte en ajoutant "..." à la fin.

**Paramètre :** Longueur maximale

**Retourne :** Chaîne de texte tronquée

### Split

Divise une chaîne de caractères en sous-chaînes en utilisant un caractère séparateur.

**Paramètres :**

- **Texte :** La chaîne à diviser
- **Séparateur :** Caractère de division (ex. `,` ou `;`)

**Retourne :** Tableau de sous-chaînes

**Exemple :** `"pomme,banane,orange"` avec le séparateur `,` retourne `["pomme", "banane", "orange"]`

### LowerCase

Renvoie une copie de la chaîne avec tous les caractères convertis en minuscules.

**Exemple :** `"BONJOUR Monde"` devient `"bonjour monde"`

### UpperCase

Renvoie une copie de la chaîne avec tous les caractères convertis en majuscules.

**Exemple :** `"bonjour Monde"` devient `"BONJOUR MONDE"`

### Concat

Combine le texte de plusieurs chaînes et renvoie la nouvelle chaîne ainsi formée.

**Paramètres :** Plusieurs valeurs texte

**Retourne :** Chaîne combinée

### Markdown

Convertit un texte écrit en markdown en texte enrichi et stylisé affichable dans les [composants Texte](https://docs.pandasuite.com/fr/essentials/design/text/).

**Exemple :** `"**gras** et *italique*"` devient du texte formaté avec gras et italique.

### Parse JSON

Analyse une chaîne de caractères contenant des données JSON et renvoie un objet ou tableau.

**Paramètre :** Chaîne JSON

**Retourne :** Objet, tableau ou valeur

### Stringify JSON

Convertit un objet ou tableau en chaîne de caractères JSON.

**Paramètre :** Objet ou tableau

**Retourne :** Chaîne formatée JSON

---

## Fonctions URL

Ces fonctions opèrent sur les types [URL](https://docs.pandasuite.com/fr/essentials/data/data-types/#url) pour analyser, inspecter et mettre à jour des liens dans une chaîne de data binding.

> **Info**
>
> Utilisez **Parse URL** si la valeur source est encore du texte brut. Dans de
> nombreux bindings, PandaSuite peut insérer automatiquement cette étape lorsque
> vous choisissez une fonction URL sur une valeur texte.

### Parse URL

Convertit une chaîne de caractères en valeur URL PandaSuite.

**Retourne :** Objet URL, ou `null` si la valeur n'est pas une URL valide

### URL vers texte

Convertit une valeur URL PandaSuite en texte brut.

**Retourne :** URL complète sous forme de chaîne

### Hôte URL

Renvoie l'hôte d'une URL, port inclus s'il est présent.

**Exemple :** `https://viewer.pandasuite.com:8443/app` retourne `viewer.pandasuite.com:8443`

### Chemin URL

Renvoie uniquement la partie chemin d'une URL, sans la query string ni le hash.

**Exemple :** `https://viewer.pandasuite.com/app/page?lang=fr#top` retourne `/app/page`

### Protocole URL

Renvoie le protocole sans les deux-points finaux.

**Exemple :** `https://viewer.pandasuite.com/app` retourne `https`

### Récupérer paramètres URL

Renvoie tous les query parameters d'une URL sous forme d'objet clé/valeur.

**Exemple :** `https://viewer.pandasuite.com/app?wid=123&lang=fr` retourne `{ "wid": "123", "lang": "fr" }`

### Définir paramètres URL

Ajoute ou remplace des query parameters et renvoie une nouvelle valeur URL.

**Paramètre :** Paramètres (objet)

- Les clés existantes sont remplacées
- Les clés absentes sont ajoutées
- Les autres query parameters sont conservés
- Les valeurs sont converties en texte avant d'être écrites dans l'URL

**Workflow type :** `Parse URL` -> `Définir paramètres URL` -> `URL vers texte`

### Supprimer paramètres URL

Supprime certains query parameters et renvoie une nouvelle valeur URL.

**Paramètre :** Clés (texte ou tableau de textes)

- Sans clé, toute la query string est supprimée
- Une valeur texte supprime une seule clé
- Un tableau supprime toutes les clés listées
- Le hash de l'URL, s'il existe, est conservé

---

## Fonctions sur les dates et le temps

Ces fonctions opèrent sur les types de données [Date](https://docs.pandasuite.com/fr/essentials/data/data-types/#date) pour le formatage, l'analyse et la manipulation de dates et d'heures.

### Format Date

Convertit une date en une chaîne de caractères selon un format donné.

Vous pouvez choisir entre des formats de date et d'heure prédéfinis ou personnalisés.

#### Types prédéfinis

Paramètres :

- **Style date :** Style de formatage pour la partie date
- **Style heure :** Style de formatage pour la partie heure
- **Fuseau horaire :** Fuseau horaire de référence

**Options Style date** (exemple : 16 septembre 2021) :

| Style   | Exemple de sortie         |
| ------- | ------------------------- |
| Aucun   | *(pas de date)*           |
| Court   | `16/09/21`                |
| Moyen   | `16 sept. 2021`           |
| Long    | `16 septembre 2021`       |
| Complet | `jeudi 16 septembre 2021` |

**Options Style heure** (exemple : 16h53 et 15 secondes) :

| Style   | Exemple de sortie                      |
| ------- | -------------------------------------- |
| Aucun   | *(pas d'heure)*                        |
| Court   | `16:53`                                |
| Moyen   | `16:53:15`                             |
| Long    | `16:53:15 UTC+2`                       |
| Complet | `16:53:15 temps universel coordonné+2` |

#### Types personnalisés

Paramètres :

- **Format Date/Heure :** Format personnalisé utilisant des codes timestamp
- **Fuseau horaire :** Fuseau horaire de référence

**Codes de format courants :**

| Code   | Description                  | Exemple (16 sept. 2021, 16:53:05) |
| ------ | ---------------------------- | --------------------------------- |
| `yyyy` | Année (4 chiffres)           | `2021`                            |
| `yy`   | Année (2 chiffres)           | `21`                              |
| `MMMM` | Mois (nom complet)           | `septembre`                       |
| `MMM`  | Mois (nom court)             | `sept.`                           |
| `MM`   | Mois (2 chiffres)            | `09`                              |
| `M`    | Mois (1-2 chiffres)          | `9`                               |
| `dd`   | Jour (2 chiffres)            | `16`                              |
| `d`    | Jour (1-2 chiffres)          | `16`                              |
| `EEEE` | Jour de la semaine (complet) | `jeudi`                           |
| `EEE`  | Jour de la semaine (court)   | `jeu.`                            |
| `HH`   | Heure 24h (2 chiffres)       | `16`                              |
| `H`    | Heure 24h (1-2 chiffres)     | `16`                              |
| `hh`   | Heure 12h (2 chiffres)       | `04`                              |
| `h`    | Heure 12h (1-2 chiffres)     | `4`                               |
| `mm`   | Minutes (2 chiffres)         | `53`                              |
| `m`    | Minutes (1-2 chiffres)       | `53`                              |
| `ss`   | Secondes (2 chiffres)        | `05`                              |
| `s`    | Secondes (1-2 chiffres)      | `5`                               |
| `a`    | Indicateur AM/PM             | `PM`                              |

**Exemples de formats :**

- `dd/MM/yyyy` → `16/09/2021`
- `dd/MM/yyyy HH:mm` → `16/09/2021 16:53`
- `EEEE d MMMM yyyy 'à' HH:mm` → `jeudi 16 septembre 2021 à 16:53`

> **Info**
>
> 💡 Voir tous les codes de format dans la [référence de formatage
> Date/Heure](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table)

### Parse Date

Analyse une chaîne de caractères avec une date et renvoie la date.

**Paramètre :** Chaîne de date

**Retourne :** Objet Date

### Subtract Date

Renvoie la différence entre deux dates.

**Paramètres :**

- **Première date :** Date de début
- **Deuxième date :** Date de fin

**Retourne :** Durée en millisecondes

### Add Seconds/Minutes/Hours/Days/Months/Years

Ajoute ou soustrait une durée spécifique à une date. Pour soustraire, saisissez un nombre négatif.

**Paramètre :** Nombre (positif pour ajouter, négatif pour soustraire)

**Retourne :** Nouvelle date

**Exemple :** Ajouter 7 jours à la date du jour retourne la date de la semaine prochaine.

### Set Seconds/Minutes/Hours/Days/Months/Years

Remplace une partie spécifique de la date avec une nouvelle valeur.

**Paramètre :** Nouvelle valeur (nombre)

**Retourne :** Nouvelle date avec le composant modifié

**Exemple :** Définir le mois à 12 sur n'importe quelle date la change en décembre tout en conservant les autres composants (jour, année, heure) inchangés.

### Get Seconds/Minutes/Hours/Day/Month/Year

Extrait un composant spécifique d'une date.

**Retourne :** Nombre représentant le composant extrait

**Exemple :** **Get Month** de `15/06/2023` retourne `6` (juin)

### Get Timestamp

Convertit explicitement une date en timestamp brut.

**Retourne :** Nombre en millisecondes depuis le 1er janvier 1970 à 00:00:00 UTC

**Note :** Si la valeur d'entrée est déjà numérique, elle est renvoyée telle quelle.

---

## Fonctions sur les tableaux et collections

Ces fonctions opèrent sur les [Tableaux](https://docs.pandasuite.com/fr/essentials/data/data-types/#tableau) et [Collections](https://docs.pandasuite.com/fr/essentials/data/data-types/#collection) pour manipuler, agréger et transformer des données structurées.

### Merge

Fusionne deux collections en une seule.

**Exemple :** `[1, 2]` fusionné avec `[3, 4]` retourne `[1, 2, 3, 4]`

### Count

Renvoie le nombre d'éléments d'un tableau.

**Exemple :** `["a", "b", "c"]` retourne `3`

### Group By

Regroupe les données selon un critère, créant des tableaux imbriqués organisés par la propriété spécifiée.

**Paramètre :** Nom de propriété pour regrouper

**Retourne :** Objet avec tableaux groupés

### Categorize by

Catégorise les données selon un critère, similaire à Group By mais avec une structure aplatie.

**Paramètre :** Nom de propriété pour catégoriser

**Retourne :** Collection catégorisée

### Uniq By

Supprime les doublons d'une collection selon un critère donné.

**Paramètre :** Nom de propriété pour vérifier l'unicité

**Retourne :** Tableau sans doublons

### Min

Renvoie la valeur minimale d'un tableau de nombres.

**Retourne :** Nombre minimal

### Min By

Renvoie l'objet ayant la valeur minimale pour une propriété spécifiée.

**Paramètres :**

- **Collection :** Tableau d'objets
- **Nom de propriété :** Champ à comparer

**Exemple :** Depuis `[{prix: 10}, {prix: 5}, {prix: 15}]`, `MinBy` sur "prix" retourne `{prix: 5}`

### Max

Renvoie la valeur maximale d'un tableau de nombres.

**Exemple :** `[10, 5, 20, 15]` retourne `20`

### Max By

Renvoie l'objet ayant la valeur maximale pour une propriété spécifiée.

**Paramètres :**

- **Collection :** Tableau d'objets
- **Nom de propriété :** Champ à comparer

**Exemple :** Depuis `[{score: 10}, {score: 25}, {score: 15}]`, `MaxBy` sur "score" retourne `{score: 25}`

### Mean

Renvoie la valeur moyenne d'un tableau de nombres.

**Retourne :** Nombre moyen

**Exemple :** `[10, 20, 30]` retourne `20`

### Mean By

Renvoie la moyenne des valeurs pour une propriété spécifiée dans une collection.

**Paramètres :**

- **Collection :** Tableau d'objets
- **Nom de propriété :** Champ à moyenner

**Exemple :** Depuis `[{note: 12}, {note: 16}, {note: 14}]`, `MeanBy` sur "note" retourne `14`

### Sum

Renvoie la somme de toutes les valeurs d'un tableau de nombres.

**Retourne :** Somme totale

**Exemple :** `[10, 20, 30]` retourne `60`

### Sum By

Renvoie la somme des valeurs pour une propriété spécifiée dans une collection.

**Paramètres :**

- **Collection :** Tableau d'objets
- **Nom de propriété :** Champ à additionner

**Exemple :** Depuis `[{prix: 10}, {prix: 20}, {prix: 5}]`, `SumBy` sur "prix" retourne `35`

### Shuffle

Permet de mélanger aléatoirement les éléments d’un tableau.
Vous pouvez définir une **Taille maximale** pour limiter le nombre d’éléments dans le résultat.

Pour en savoir plus sur l'usage de la fonction **Shuffle** : [Ajouter de l'aléatoire](https://docs.pandasuite.com/fr/essentials/gamification/random/)

### Chunk

Découpe un tableau en plusieurs sous-tableaux de la taille spécifiée.

**Paramètre :** Taille de chaque morceau

**Exemple :** `[1, 2, 3, 4, 5, 6]` avec taille `2` retourne `[[1, 2], [3, 4], [5, 6]]`

### Distance

Calcule la distance entre deux points [Coordonnée](https://docs.pandasuite.com/fr/essentials/data/data-types/#coordonnée).

**Paramètres :**

- **Première coordonnée :** Point de départ
- **Deuxième coordonnée :** Point d'arrivée

**Retourne :** Distance en mètres

> **Info**
>
> 💡 Utile pour les fonctionnalités de proximité, trouver les emplacements les
> plus proches, ou les applications de géo-clôture.

### Join

Convertit tous les éléments d'un tableau en une chaîne de caractères séparée par un séparateur.

**Paramètres :**

- **Tableau :** Tableau de valeurs
- **Séparateur :** Chaîne à insérer entre les éléments

**Exemple :** `["pomme", "banane", "orange"]` avec le séparateur `", "` retourne `"pomme, banane, orange"`

### Keys

Renvoie un tableau des noms de propriétés énumérables (clés) d'un objet.

**Paramètre :** Objet (type Clé/Valeur)

**Retourne :** Tableau de clés

**Exemple :** Depuis `{ nom: "Paris", pays: "France" }` retourne `["nom", "pays"]`

### Values

Renvoie un tableau des valeurs des propriétés énumérables d'un objet.

**Paramètre :** Objet (type Clé/Valeur)

**Retourne :** Tableau de valeurs

**Exemple :** Depuis `{ nom: "Paris", pays: "France" }` retourne `["Paris", "France"]`

### Pluck

Extrait une valeur pour chaque élément d'un tableau ou d'une collection (selon un chemin) et retourne le tableau des résultats.

**Paramètre :** Chemin

**Retourne :** Tableau des valeurs extraites

**Exemple :** Depuis `[{nom: "bonjour"}, {nom: "coucou"}, {nom: "salut"}]`, `Pluck` sur "nom" retourne `["bonjour", "coucou", "salut"]`

### Flatten

Aplatit des tableaux imbriqués selon une profondeur donnée (`1` par défaut). Si le résultat contient des références, celles ayant le même chemin source sont regroupées.

**Paramètre :** Profondeur (entier, `1` par défaut)

**Retourne :** Tableau aplati

**Exemple :** `[[1, 2], [3, 4]]` avec une profondeur de `1` retourne `[1, 2, 3, 4]`

### Expand

Renvoie le ou les éléments associés à une ou plusieurs [Références](https://docs.pandasuite.com/fr/essentials/data/data-types/#référence), en les résolvant pour récupérer les objets complets vers lesquels elles pointent.

**Paramètre :** Champ Référence ou Multi-référence

**Retourne :** Objet(s) référencé(s)

### Filter

Filtre les éléments d'un tableau ou d'une collection selon une condition et retourne ceux qui correspondent.

**Paramètre :** Condition

**Retourne :** Tableau filtré (ou une liste de Références lors du filtrage d'une Collection)

> **Note**
>
> Pour filtrer ce qu’affiche un composant **Collection / Liste**, utilisez sa
> propriété **Filtre** et consultez [Filtrer une
> collection](https://docs.pandasuite.com/fr/essentials/data/filter-a-collection/).

Pour connaître les fonctions de comparaison utilisables dans une condition, consultez le composant [Condition](https://docs.pandasuite.com/fr/essentials/components/condition/).

### Find

Retourne le premier élément d'une collection qui correspond à une condition.

**Paramètres :**

- **Collection :** Tableau à parcourir
- **Condition :** Expression à évaluer pour chaque élément

**Retourne :** Premier élément correspondant ou undefined

**Exemple :** Depuis `[{age: 15}, {age: 25}, {age: 20}]`, trouver où `age > 18` retourne `{age: 25}`

### Find Index

Similaire à Find, mais retourne l'index du premier élément correspondant à la condition au lieu de l'élément lui-même.

**Retourne :** Numéro d'index (commençant à 0) ou -1 si non trouvé

### Find Last Index

Similaire à Find Index, mais itère sur les éléments de droite à gauche, retournant l'index du dernier élément correspondant.

**Retourne :** Numéro d'index ou -1 si non trouvé
