# Leçon 4 — Commandes et calculs

Source : https://docs.berkios.online/studio/commandes-et-calculs/ · Section : Studio · Documentation officielle BERKIOS (https://docs.berkios.online)


> **v0.7.76 :** 100 commandes supplémentaires (texte, nombres, listes, dates, validation, couleur, confirmation, export…) sont décrites dans [la leçon 8](https://docs.berkios.online/reference/cent-nouvelles-commandes/).

## Commandes disponibles dans l'interpréteur du Studio
| Commande | Rôle |
|---|---|
| `message "Texte"` | Afficher une notification (types, fenêtre modale et confirmation : `message.info`, `message.modal`, `message.confirmer`… voir la [leçon 9](https://docs.berkios.online/studio/messages-et-dialogues/)) |
| `set "Cible" "Valeur"` | Définir la valeur d'un composant |
| `increment "Cible" 1` | Ajouter un incrément numérique |
| `decrement "Cible" 1` | Soustraire un incrément numérique |
| `show "Cible"` | Afficher un composant |
| `hide "Cible"` | Masquer un composant |
| `toggle "Cible"` | Basculer sa visibilité |
| `calculate "Résultat" "A" * "B"` | Calculer avec deux champs |
| `ajouter "Cible" "texte"` (`append`) | Ajouter du texte à la fin d'un champ |
| `effacer "Cible"` (`clear`) | Vider un champ |
| `retirer "Cible"` (`backspace`) | Supprimer le dernier caractère |
| `evaluer "Expression" "Résultat" [silencieux]` (`evaluate`) | Calculer une expression (+ − × ÷ ^ % ( ), sin cos tan sqrt log ln abs, π, e ; angles en degrés) |
| `toutes les 100 ms` (`every`) | En-tête de minuterie : les commandes qui suivent se répètent |
| `si "Cible" >= 100 alors ouvrir "Interface"` | Condition sur une valeur |
| `circuler "Cible"` / `arreter` | Texte en circulation / arrêt de la minuterie |
| `avancer "Cible" 40` (`advance`) | Déplacer le composant vers la droite de 40 px (10 px par défaut) |
| `reculer "Cible" 40` (`retreat`) | Déplacer vers la gauche |
| `monter "Cible" 40` / `descendre "Cible" 40` (`up` / `down`) | Déplacer vers le haut / le bas |
| `deplacer "Cible" dx dy` (`move`) | Déplacer de dx, dy pixels (valeurs négatives permises) |
| `placer "Cible" x y` (`place`) | Placer le composant à la position x, y |
| `quand touche espace` (`on key space`) | En-tête d'événement clavier : touches `espace`, `droite`, `gauche`, `haut`, `bas`, `entree`, `echap` ou une lettre (`a`) |
| `aller "Interface"` (`go`) | Aller directement à une interface (sans empiler d'historique) : connexion, déconnexion, accueil |
| `stocker "clé" "Cible"` (`store`) | Mémoriser la valeur d'un composant (conservée dans le navigateur) |
| `lire "clé" "Cible" ["défaut"]` (`recall`) | Relire une valeur mémorisée dans un composant ou une variable `$nom` (vide si la clé n'existe pas) |
| `quitter` (`return`) | Arrêter le script de l'événement en cours (ex. `si "nom" = "" alors quitter`) |
| `audio jouer` / `pause` / `basculer` / `arreter` | Lecture, pause, lecture⇄pause, arrêt du lecteur audio |
| `audio volume 50` (ou `+10`, `-10`) | Volume de 0 à 100 (absolu ou relatif) |
| `audio avancer 10` / `reculer 10` / `position 30` | Se déplacer dans le morceau (secondes) |
| `audio source "Cible"` | Choisir le morceau : un sélecteur de fichier (MP3, WAV, OGG…), un composant contenant une URL / `data:` ou une URL |
| `audio boucle oui` | Répéter le morceau |
| `requete "https://…" "$reponse"` (`http`, `fetch`) | Requête HTTP GET (Internet, serveur avec CORS) ; la réponse est placée dans un composant ou une variable. Le script attend la réponse avant la commande suivante |
| `extraire "$reponse" "chemin.json" "$cible"` (`json`) | Lire une valeur dans un JSON : `current.temperature_2m`, `results.0.name` (vide si absente) |
| `associer "$code" "$cible" "0:Clair\|1,2:Nuageux\|51-57:Bruine\|*:Autre"` (`map`) | Traduire une valeur par table (valeurs, listes `1,2`, plages `51-57`, `*` = défaut) |

Lecture de l'état audio : `{audio.temps}`, `{audio.duree}`, `{audio.progression}` (0–100), `{audio.etat}`, `{audio.volume}`, `{audio.titre}` — par exemple `set "barre" "{audio.progression}"` dans un bloc `toutes les 250 ms`.

Dans une adresse web, `{ville:url}` insère la valeur d'un composant encodée (accents, espaces). Dans un champ de saisie, la touche Entrée peut déclencher `quand touche entree`.

Variables : `$nom` est une mémoire temporaire partagée par tous les scripts. Dans les textes (`message`, `set`, `ajouter`, clés), `{composant}` ou `{$variable}` est remplacé par sa valeur. À droite d'un `si`, un composant ou une variable écrit sans guillemets est comparé comme du texte (`si "saisie" != $mdp alors …`).

Position lisible dans les scripts : `"brique.x"`, `"brique.y"`, `"brique.largeur"`, `"brique.hauteur"` (ex. `si "brique.x" >= 700 alors message "Arrivée !"`). Le composant ne sort jamais de la page, et sa position d'origine est rétablie en quittant l'aperçu.

Les opérateurs de `calculate` sont `+`, `-`, `*` et `/`.

## Exemple : calcul de ligne
```text
quand clic
  calculate "Total de ligne" "Prix unitaire" * "Quantité"
  message "Total de ligne mis à jour"
```

## Exemple : panneau d'aide
```text
quand clic
  toggle "instructions"
```

## Exemple : une touche de calculatrice
```text
quand clic
  ajouter "panneau_expression" "7"
  evaluer "panneau_expression" "panneau_resultat" silencieux
```
Voir `examples/calculatrice-scientifique.berkios.json` : chaque touche contient son code.

## Limites
Il n'existe pas ici de fonctions définies par l'utilisateur ni d'exécution JavaScript générale (les variables `$nom` et, depuis la v0.7.76, `repeter` et `sauf-si` existent). N'inventez pas de commandes : vérifiez la syntaxe prise en charge par le moteur.
