138 lines
3.1 KiB
Markdown
138 lines
3.1 KiB
Markdown
# CookieCode
|
|
|
|
CookieCode est une microlibrairie JavaScript educative pour apprendre les bases de l'algorithmique avec des recettes de cuisine.
|
|
|
|
L'idee :
|
|
|
|
| Cuisine | Programmation |
|
|
| --- | --- |
|
|
| Recette | Programme |
|
|
| Ingredients | Variables |
|
|
| Materiel | Constantes / ressources |
|
|
| Etapes | Instructions |
|
|
| Actions culinaires | Fonctions |
|
|
| `si` | Condition |
|
|
| `repeter` | Boucle |
|
|
|
|
## Objectif du MVP
|
|
|
|
- fonctionner directement dans une page HTML via une balise `<script>` ;
|
|
- exposer une variable globale `CookieCode` ;
|
|
- proposer une API chainable proche du langage naturel ;
|
|
- afficher une trace de recette et une lecture algorithmique ;
|
|
- rester sans dependance.
|
|
|
|
## Utilisation dans une page
|
|
|
|
```html
|
|
<div id="app"></div>
|
|
<script src="dist/cookiecode.js"></script>
|
|
<script>
|
|
CookieCode.configurer({
|
|
sortie: "#app",
|
|
afficherNotions: true
|
|
});
|
|
|
|
CookieCode.recette("Cookie au chocolat")
|
|
.prendre("farine", 200, "g")
|
|
.prendre("sucre", 100, "g")
|
|
.prendre("chocolat", 150, "g")
|
|
.utiliser("saladier")
|
|
.ajouter("farine")
|
|
.ajouter("sucre")
|
|
.ajouter("chocolat")
|
|
.melanger()
|
|
.repeter(2, function (recette) {
|
|
recette.melanger();
|
|
})
|
|
.cuire(12, "minutes")
|
|
.servir();
|
|
</script>
|
|
```
|
|
|
|
## API principale
|
|
|
|
### Creation
|
|
|
|
```js
|
|
CookieCode.recette("Cookies");
|
|
CookieCode.ingredient("farine", 200, "g");
|
|
CookieCode.materiel("saladier");
|
|
CookieCode.constante("temperature", 180);
|
|
CookieCode.preparation("pate");
|
|
```
|
|
|
|
### Methodes d'une recette
|
|
|
|
```js
|
|
.prendre(nom, quantite, unite)
|
|
.utiliser(materiel)
|
|
.ajouter(element, quantite, unite)
|
|
.retirer(element)
|
|
.couper(element, forme)
|
|
.melanger()
|
|
.verser(contenu, contenant)
|
|
.chauffer(element, temperature)
|
|
.cuire(duree, unite)
|
|
.attendre(duree, unite)
|
|
.repeter(nombre, action)
|
|
.si(condition, action, sinonAction)
|
|
.servir(element)
|
|
.afficher()
|
|
.toText()
|
|
.toHTML()
|
|
```
|
|
|
|
## Exemple avec variables
|
|
|
|
```js
|
|
const farine = CookieCode.ingredient("farine", 200, "g");
|
|
const sucre = CookieCode.ingredient("sucre", 100, "g");
|
|
const saladier = CookieCode.materiel("saladier");
|
|
|
|
const recette = CookieCode.recette("Cookies")
|
|
.utiliser(saladier)
|
|
.ajouter(farine)
|
|
.ajouter(sucre)
|
|
.melanger();
|
|
|
|
console.log(recette.toText());
|
|
```
|
|
|
|
## Exemple avec boucle et condition
|
|
|
|
```js
|
|
const pate = CookieCode.preparation("pate").definir("texture", "trop seche");
|
|
|
|
CookieCode.recette("Pate a cookies")
|
|
.ajouter("farine", 200, "g")
|
|
.si(function () {
|
|
return pate.est("trop seche");
|
|
}, function (recette) {
|
|
recette.ajouter("lait", 20, "ml");
|
|
})
|
|
.repeter(3, function (recette) {
|
|
recette.melanger();
|
|
})
|
|
.servir();
|
|
```
|
|
|
|
## Cartes pedagogiques conseillees
|
|
|
|
| Type de carte | Mots cles | Notion |
|
|
| --- | --- | --- |
|
|
| Structure | `recette`, `servir` | programme / resultat |
|
|
| Donnee | `ingredient`, `quantite`, `unite` | variable / valeur |
|
|
| Materiel | `materiel`, `utiliser` | constante / ressource |
|
|
| Action | `prendre`, `ajouter`, `couper`, `melanger`, `cuire` | fonction |
|
|
| Logique | `si`, `sinon`, `repeter` | condition / boucle |
|
|
|
|
## Developpement
|
|
|
|
```sh
|
|
npm test
|
|
npm run build
|
|
```
|
|
|
|
Aucune dependance n'est necessaire pour lancer les tests du MVP.
|