Aller au contenu

Tutoriel : votre première recette complexe

À vos fourneaux ! Dans ce tutoriel, nous allons rédiger une recette complète de Tarte au Citron.

Cette recette va bien au-delà d’une simple liste d’ingrédients. Nous y exploiterons le compilateur Gram pour concevoir une recette dynamique, modulable et orientée données.

Commençons par la pâte sucrée. Le symbole @ identifie les ingrédients, et # le matériel (cookware).

## Pâte Sucrée

[Mixer] Dans un #robot multifonction{}, la @farine{180 g}, le @sucre glace{55 g}, et le @sel{1/4 c.à.c}.

[Sabler] Ajouter le @beurre{115 g}(froid, coupé en petits dés) et mélanger pendant ~{1-2 min} jusqu'à obtenir un mélange sableux.

[Incorporer] Ajouter l'@œuf{1}, l'@?extrait de vanille{1/2 c.à.c} et mélanger jusqu'à ce que la pâte forme une boule.

[Repos] Envelopper de #film alimentaire{} et laisser reposer au réfrigérateur pendant ~{1 h}.

Remarquez les balises [Action] (ex. [Mixer], [Repos]). Bien qu’elles soient optionnelles, leur utilisation est fortement recommandée. Elles permettent aux interfaces utilisateur (UI) de générer des résumés clairs et structurés de chaque étape.

Grâce à cette syntaxe, le compilateur extrait automatiquement les ingrédients pour constituer la liste de courses, tout en estimant le temps actif total (sur la base de 2 minutes par étape) en complément des temps de repos.

Pour l’instant, notre pâte est décrite sous la forme d’une suite d’étapes indépendantes. Pour la réutiliser ultérieurement (lors de la cuisson), il convient d’indiquer au compilateur que le résultat de cette section constitue un ensemble unifié.

Pour cela, nous utilisons la déclaration intermédiaire (->&nom) à la fin du titre de section.

## Pâte Sucrée ->&pâte sucrée{}

[Mixer] Dans un #robot multifonction{}, la @farine{180 g}, le @sucre glace{55 g}, et le @sel{1/4 c.à.c}.

[Sabler] Ajouter le @beurre{115 g}(froid, coupé en petits dés) et mélanger pendant ~{1-2 min} jusqu'à obtenir un mélange sableux.

[Incorporer] Ajouter l'@œuf{1}, l'@?extrait de vanille{1/2 c.à.c} et mélanger jusqu'à ce que la pâte forme une boule.

[Repos] Envelopper de #film alimentaire{} et laisser reposer au réfrigérateur pendant ~{1 h}.

Désormais, vous pouvez faire référence à cette pâte avec la syntaxe &nom dans les étapes suivantes, sans avoir à ressaisir ses ingrédients. Le compilateur comprend automatiquement qu’il s’agit d’un produit intermédiaire et ne l’ajoute pas à la liste de courses.

## Cuisson du Fond de Tarte

[Préchauffer] Préchauffer le #four{} à ^{180°C}.

[Étaler] Étaler la &pâte sucrée{} pendant ~{5 min} et la foncer dans un #cercle à tarte{}.

[Cuire] Pendant ~_{20 min} jusqu'à coloration dorée.

À l’Étape 1, nous avions écrit : [Repos] Envelopper de #film alimentaire{} et laisser reposer au réfrigérateur pendant ~{1 h}. Par défaut, les minuteurs sont actifs. Le compilateur considère alors que vous êtes mobilisé pendant cette heure et l’ajoute au temps actif.

Cependant, le repos d’une pâte au réfrigérateur est une étape passive pendant laquelle vous pouvez préparer la suite de la recette. Pour indiquer qu’une durée est passive, il suffit d’ajouter un tiré bas (underscore) ~_ :

[Repos] Envelopper de #film alimentaire{} et laisser reposer au réfrigérateur pendant ~_{1 h}.

Le compilateur déduit alors cette heure du temps actif tout en la conservant dans le temps total.

La recette nécessite à la fois du zeste et du jus. Si vous inscriviez @zeste de citron{1 c.à.s} et @jus de citron{120 g}, une liste de courses classique compterait deux produits distincts. Or, en pratique, les citrons s’achètent entiers.

C’est ici qu’interviennent les ingrédients composites (<@parent).

Voici la section du Crémeux au Citron :

## Crémeux au Citron

[Fouetter] Dans une #casserole{}, fouetter le @zeste de citron{1 c.à.s}<@citron, le @jus de citron{120 g}<@citrons{2}, le @sucre{150 g}, et les @œufs{3}.

[Cuire] Cuire à ^{feu moyen} pendant ~{8 min} jusqu'à épaississement.

Comme le zeste et le jus font référence à <@citron (ou <@citrons), le compilateur identifie qu’ils proviennent d’un même ingrédient parent. Sans nécessiter de base de données complexe pour estimer les rendements, il applique la règle du MAX : il compare la quantité d’ingrédient parent requise par chaque sous-élément (<@citron équivaut à 1 citron pour le zeste, <@citrons{2} équivaut à 2 citrons pour le jus) et retient la valeur maximale. Dans cet exemple, max(1, 2) = 2 : la liste de courses indiquera ainsi qu’il faut prévoir 2 citrons entiers.

En pâtisserie, la précision des proportions est essentielle. Que se passe-t-il si vos citrons fournissent 140 g de jus au lieu des 120 g prévus ? Si la quantité de sucre reste fixe, la préparation risque d’être trop acide. Pour maintenir un équilibre parfait, la quantité de sucre doit s’ajuster dynamiquement afin de représenter exactement 125 % du poids du jus.

C’est le rôle des quantités relatives (% @&cible) :

[Fouetter] Dans une #casserole{}, le @zeste de citron{1 c.à.s}<@citron, le @jus de citron{120 g}<@citrons{2}, le @sucre{125% @&jus de citron}, et les @œufs{3}.

La quantité de sucre est désormais liée à celle du jus. Si vous modifiez la quantité de jus en fonction de votre rendement réel, le compilateur recalculera automatiquement la masse de sucre nécessaire (ici 150 g) pour préserver le ratio initial.

Voici la recette complète dans son ensemble. Remarquez la clarté et la simplicité de lecture, en dépit des nombreux calculs effectués en arrière-plan :

---
title: Tarte au Citron Meringuée
portions: 8
---

## Pâte Sucrée ->&pâte sucrée{}

[Mixer] Dans un #robot multifonction{}, la @farine{180 g}, le @sucre glace{55 g}, et le @sel{1/4 c.à.c}.

[Sabler] Ajouter le @beurre{115 g}(froid, coupé en petits dés) et mélanger pendant ~{1-2 min} jusqu'à obtenir un mélange sableux.

[Incorporer] Ajouter l'@œuf{1}, l'@?extrait de vanille{1/2 c.à.c} et mélanger jusqu'à ce que la pâte forme une boule.

[Repos] Envelopper de #film alimentaire{} et laisser reposer au réfrigérateur pendant ~_{1 h}.

## Crémeux au Citron ->&crémeux

[Fouetter] Dans une #casserole{}, le @zeste de citron{1 c.à.s}<@citron, le @jus de citron{120 g}<@citrons{2}, le @sucre{125% @&jus de citron}, et les @œufs{3}.

[Cuire] À ^{feu moyen} pendant ~{8 min} jusqu'à épaississement.

## Cuisson du Fond de Tarte ->&fond cuit{}

[Préchauffer] Le #four à ^{180°C}.

[Étaler] La &pâte sucrée{} pendant ~{5 min} et la foncer dans un #cercle à tarte{}.

[Cuire] Pendant ~_{20 min} jusqu'à coloration dorée. Laisser refroidir.

## Assemblage

[Verser] Le &crémeux dans le &fond cuit{}. Réfrigérer pendant ~_{2 h}.

En lançant gram view tarte-citron.gram, le compilateur s’est chargé de tous les calculs et du formatage à votre place :

  • Temps Actif : ~24.5 min (il exclut automatiquement les 3 heures de repos au réfrigérateur).
  • Temps Total : ~3h 44.5 min.
  • Liste de Courses : Il a agrégé l’intégralité des ingrédients. Il a combiné l’@œuf{1} et les @œufs{3} en 4 œufs. Il a calculé les citrons entiers nécessaires pour le zeste et le jus. Il a automatiquement converti la proportion relative en exactement 150 g de sucre.

Félicitations ! Vous venez de concevoir une recette structurée, dynamique et facilement adaptable.

Maintenant que vous avez conçu une recette complète mono-fichier, découvrez comment organiser une collection de recettes modulaires et explorer la référence du langage :