| 📦 Turbo MoonBit cc1f595 k33g 15h ago | 1 | # Tutoriel : votre premier programme MoonBit dans Turbo MoonBit |
| 2 | |
| 3 | À la fin de ce tutoriel, vous aurez écrit, formaté, lancé et cassé un petit programme MoonBit sans quitter l'éditeur — et vu l'éditeur vous dire où était l'erreur. |
| 4 | |
| 5 | Aucune connaissance préalable de Turbo MoonBit n'est nécessaire. Il vous faut Go 1.26 ou plus récent pour compiler l'éditeur, et la chaîne d'outils MoonBit pour compiler le programme. |
| 6 | |
| 7 | ## Prérequis |
| 8 | |
| 9 | Vérifiez Go : |
| 10 | |
| 11 | ```bash |
| 12 | go version |
| 13 | ``` |
| 14 | |
| 15 | Vous devriez voir quelque chose comme : |
| 16 | |
| 17 | ``` |
| 18 | go version go1.26.5 linux/arm64 |
| 19 | ``` |
| 20 | |
| 21 | Vérifiez la chaîne d'outils MoonBit : |
| 22 | |
| 23 | ```bash |
| 24 | moon version --all |
| 25 | ``` |
| 26 | |
| 27 | Vous devriez voir trois lignes, chacune se terminant par un chemin : |
| 28 | |
| 29 | ``` |
| 30 | moon 0.1.20260904 (94521db 2026-09-04) ~/.moon/bin/moon |
| 31 | moonc v0.10.12+1634b282e (2026-09-07) ~/.moon/bin/moonc |
| 32 | moonrun 0.1.20260904 (94521db 2026-09-04) ~/.moon/bin/moonrun |
| 33 | ``` |
| 34 | |
| 35 | Si la commande est introuvable, installez d'abord la chaîne d'outils — [une seule commande suffit](../how-to/install-the-moonbit-toolchain.md). |
| 36 | |
| 37 | ## Étape 1 — Installer l'éditeur |
| 38 | |
| 39 | ```bash |
| 40 | git clone https://rickub.com/turbo-editors/turbo-moonbit.git |
| 41 | cd turbo-moonbit |
| 42 | make install |
| 43 | ``` |
| 44 | |
| 45 | L'installeur compile, installe, puis vérifie ce qu'il a installé. Les dernières lignes sont : |
| 46 | |
| 47 | ``` |
| 48 | ==> Checking the language server |
| 49 | ✓ moon-lsp at ~/.moon/bin/moon-lsp |
| 50 | |
| 51 | ==> Ready |
| 52 | ``` |
| 53 | |
| 54 | Nous avons maintenant une commande `turbo-moonbit`. |
| 55 | |
| 56 | ## Étape 2 — Créer un projet |
| 57 | |
| 58 | ```bash |
| 59 | cd /tmp |
| 60 | moon new hello |
| 61 | cd hello |
| 62 | ``` |
| 63 | |
| 64 | ``` |
| 65 | Created username/hello at hello |
| 66 | ``` |
| 67 | |
| 68 | `moon new` écrit un `moon.mod`, un `moon.pkg`, un fichier de bibliothèque, quelques fichiers de test, et un `cmd/main/main.mbt` contenant un hello-world. **C'est `moon.mod` que Turbo MoonBit cherche** pour trouver la racine d'un projet, et c'est le dossier dans lequel `moon-lsp` sera lancé. |
| 69 | |
| 70 | ## Étape 3 — Ouvrir le fichier |
| 71 | |
| 72 | ```bash |
| 73 | turbo-moonbit cmd/main/main.mbt |
| 74 | ``` |
| 75 | |
| 76 | L'écran se remplit. En haut : |
| 77 | |
| 78 | ``` |
| 79 | File Edit Search Run Code Options Window Snippets MoonBit Help |
| 80 | ``` |
| 81 | |
| 82 | Dix menus, et le neuvième porte le nom du langage. En bas, à droite, vous devriez voir : |
| 83 | |
| 84 | ``` |
| 85 | 1:1 LSP: ready |
| 86 | ``` |
| 87 | |
| 88 | `LSP: ready` signifie que `moon-lsp` a démarré dans ce dossier. Nous nous en servirons à l'étape 8. |
| 89 | |
| 90 | ## Étape 4 — Écrire le programme |
| 91 | |
| 92 | Sélectionnez tout avec `Ctrl-A` et appuyez sur `Suppr`, puis tapez ceci. Tapez-le exactement ; nous allons regarder les couleurs juste après. |
| 93 | |
| 94 | ```moonbit |
| 95 | ///| |
| 96 | struct Greeting { |
| 97 | name : String |
| 98 | times : Int |
| 99 | } |
| 100 | |
| 101 | ///| |
| 102 | fn greet(g : Greeting) -> Unit { |
| 103 | for i in 0..<g.times { |
| 104 | println("Hello, \{g.name}! (\{i + 1})") |
| 105 | } |
| 106 | } |
| 107 | |
| 108 | ///| |
| 109 | fn main { |
| 110 | greet({ name: "MoonBit", times: 3 }) |
| 111 | } |
| 112 | ``` |
| 113 | |
| 114 | Appuyez sur `F2` pour enregistrer. L'étoile à côté de `main.mbt` dans le titre de la fenêtre disparaît. |
| 115 | |
| 116 | ## Étape 5 — Lire les couleurs |
| 117 | |
| 118 | Regardez ce que vous venez de taper. Dans le thème par défaut `turbo-classic` : |
| 119 | |
| 120 | | Quoi | Couleur | |
| 121 | | --- | --- | |
| 122 | | `struct`, `fn`, `for`, `in` | blanc vif, gras — mots-clés | |
| 123 | | `Greeting`, `String`, `Int`, `Unit` | cyan vif — types | |
| 124 | | `greet`, là où il est déclaré comme là où il est appelé | jaune vif, gras — fonctions | |
| 125 | | `println` | cyan vif, gras — un nom fourni par le langage | |
| 126 | | `name`, `times`, `g`, `i` | jaune vif — noms ordinaires | |
| 127 | | `"Hello, \{g.name}! (\{i + 1})"` | vert, **en entier** — une seule chaîne | |
| 128 | | `0`, `1`, `3` | magenta — nombres | |
| 129 | | `///\|` | gris — un commentaire | |
| 130 | |
| 131 | Deux de ces lignes méritent un second regard. |
| 132 | |
| 133 | **`Greeting` est cyan et `greet` est jaune**, et personne n'a dit à l'éditeur lequel des deux est un type. C'est la règle propre à MoonBit qui tranche : un nom commençant par une majuscule ne peut être qu'un type, un trait ou un constructeur. |
| 134 | |
| 135 | **La chaîne est verte du premier guillemet au dernier**, interpolations comprises. Le `\{g.name}` qu'elle contient n'est pas coloré comme du code — [et c'est délibéré](../explanation/colouring-and-completion.md). |
| 136 | |
| 137 | ## Étape 6 — Donner ses outils au projet |
| 138 | |
| 139 | Appuyez sur `F10` pour ouvrir la barre de menus, puis sur `→` **huit fois** pour atteindre **MoonBit** — après Edit, Search, Run, Code, Options, Window et Snippets. Plus rapide : `Alt-M`. |
| 140 | |
| 141 | Le menu contient deux entrées, et une seule est disponible : |
| 142 | |
| 143 | ``` |
| 144 | ┌───────────────────┐ |
| 145 | │ Create tools file │ |
| 146 | │ Open tools file │ ← grisée ; il n'y a pas encore de fichier à ouvrir |
| 147 | └───────────────────┘ |
| 148 | ``` |
| 149 | |
| 150 | Choisissez **Create tools file**. |
| 151 | |
| 152 | Une seconde fenêtre s'ouvre sur le fichier qui vient d'être écrit, `.turbo-moonbit/tools.toml`. Lisez-le si vous voulez — il explique chacune de ses clés — puis fermez-le avec `Ctrl-W`. |
| 153 | |
| 154 | Rouvrez le menu MoonBit. Il contient maintenant neuf commandes, et les deux entrées ont échangé leurs rôles : `Create tools file` est grisée, et c'est `Open tools file` qui est choisissable. |
| 155 | |
| 156 | ## Étape 7 — Le formater, et le lancer |
| 157 | |
| 158 | Appuyez sur `Alt-M` et choisissez **Format**. |
| 159 | |
| 160 | Une boîte de dialogue s'ouvre, se remplit, et affiche `— exit 0`. Appuyez sur `Échap`. |
| 161 | |
| 162 | Regardez la dernière ligne de votre fonction `main`. Elle a changé : |
| 163 | |
| 164 | ```moonbit |
| 165 | greet({ name: "MoonBit", times: 3, }) |
| 166 | ``` |
| 167 | |
| 168 | `moon fmt` a ajouté une virgule finale, et l'éditeur a rechargé le fichier dont on venait de lui dire qu'il avait changé sous ses pieds. |
| 169 | |
| 170 | Maintenant `Alt-M`, puis **Run**. Une boîte demande une valeur avant de lancer la commande : |
| 171 | |
| 172 | ``` |
| 173 | ┌──────────────── Run ────────────────┐ |
| 174 | │ package, e.g. cmd/main │ |
| 175 | │ [ ] │ |
| 176 | └─────────────────────────────────────┘ |
| 177 | ``` |
| 178 | |
| 179 | Tapez `cmd/main` et appuyez sur `Entrée`. Une fenêtre de terminal s'ouvre et le programme s'y exécute : |
| 180 | |
| 181 | ``` |
| 182 | Hello, MoonBit! (1) |
| 183 | Hello, MoonBit! (2) |
| 184 | Hello, MoonBit! (3) |
| 185 | ``` |
| 186 | |
| 187 | Un terminal plutôt qu'une boîte de dialogue, parce qu'un programme qui lit le clavier doit pouvoir recevoir une réponse. Le programme est terminé, la fenêtre a donc cessé de se comporter comme un terminal et toutes les touches reviennent à l'éditeur : appuyez sur `Ctrl-W` pour la fermer. |
| 188 | |
| 189 | ## Étape 8 — Le casser, et voir où |
| 190 | |
| 191 | Allez sur la ligne du `println` et remplacez `g.name` par `g.nam`. Appuyez sur `F2` pour enregistrer. |
| 192 | |
| 193 | En une seconde ou deux, deux choses se produisent. Un `×` rouge apparaît dans la gouttière, juste à gauche du numéro de cette ligne. Et la barre d'état affiche : |
| 194 | |
| 195 | ``` |
| 196 | ⚠ The value identifier nam is unbound. |
| 197 | ``` |
| 198 | |
| 199 | Personne ne l'a demandé. `moon-lsp` le publie de lui-même chaque fois qu'il relit le fichier. |
| 200 | |
| 201 | Remettez le `e` et enregistrez de nouveau ; la marque et le message disparaissent tous les deux. |
| 202 | |
| 203 | ## Étape 9 — Changer de thème |
| 204 | |
| 205 | `F10`, puis `→` **cinq fois** pour atteindre **Options** — après Edit, Search, Run et Code. Choisissez **Theme…**. |
| 206 | |
| 207 | Une liste s'ouvre sur le thème dans lequel vous êtes. Appuyez sur `↓` jusqu'à `cobalt` puis `Entrée`. Tout l'écran change, en gardant la même forme. |
| 208 | |
| 209 | Appuyez sur `Alt-X` pour quitter. L'éditeur pose d'abord la question des fichiers non enregistrés, s'il y en a. |
| 210 | |
| 211 | ## Et maintenant ? |
| 212 | |
| 213 | Vous avez créé un projet MoonBit, écrit un programme dans l'éditeur, formaté, lancé, cassé, et vu l'éditeur dire où. Pour aller plus loin : |
| 214 | |
| 215 | - Pour faire des choses précises → les [guides pratiques](../how-to/) |
| 216 | - Pour savoir exactement ce qui est coloré et comment → [langages colorés](../reference/languages.md) |
| 217 | - Pour comprendre pourquoi l'éditeur est bâti ainsi → les [explications](../explanation/) |