first commit

This commit is contained in:
Johan
2025-12-15 16:45:48 +01:00
commit e12f647766
4 changed files with 395 additions and 0 deletions

83
cafe_callbacks.js Normal file
View File

@@ -0,0 +1,83 @@
// ===================================================================
// Machine à café — version avec callbacks
// ===================================================================
// --- Configuration des temps de préparation (en millisecondes) ---
const TEMPS_SELECTION = 500;
const TEMPS_MOUTURE = 700;
const TEMPS_CHAUFFAGE = 1000;
const TEMPS_PREPARATION = 500;
// --- PARTIE 1 : fonctions asynchrones de base (avec callbacks) ---
// Ces fonctions simulent des opérations asynchrones (ex: I/O, requête réseau)
// en utilisant un callback comme dernier argument.
// Convention : le callback est appelé avec (erreur, resultat).
/**
* Simule la sélection d'un type de café.
* @param {string} nomCafe - le nom du café à sélectionner.
* @param {function(Error|null, string?)} callback - la fonction à appeler une fois l'opération terminée.
*/
function selectionnerCafe(nomCafe, callback) {
console.log(`1. Sélection du café : ${nomCafe}...`);
setTimeout(() => {
console.log(` -> Café "${nomCafe}" sélectionné.`);
// Le premier argument est pour une erreur potentielle (ici, null).
// Le second est le résultat.
callback(null, nomCafe);
}, TEMPS_SELECTION);
}
/**
* Simule le broyage des grains de café.
* @param {string} nomCafe - le nom du café (reçu de l'étape précédente).
* @param {function(Error|null, string?)} callback - la fonction de rappel.
*/
function moudreGrains(nomCafe, callback) {
console.log(`2. Broyage des grains pour ${nomCafe}...`);
// TODO : implémenter la fonction moudreGrains
}
/**
* Simule le chauffage de l'eau.
* @param {number} temperature - la température cible.
* @param {function(Error|null, string?)} callback - la fonction de rappel.
*/
function chaufferEau(temperature, callback) {
console.log(`3. Chauffage de l'eau à ${temperature}°C...`);
// TODO : implémenter la fonction chaufferEau
}
/**
* Simule la préparation finale du café.
* @param {string} typeCafe - le type de café à préparer.
* @param {string} grains - l'ingrédient "grains-moulus".
* @param {string} eau - l'ingrédient "eau-chaude".
* @param {function(Error|null, string?)} callback - la fonction de rappel finale.
*/
function preparerCafe(typeCafe, grains, eau, callback) {
console.log(`4. Préparation du café ${typeCafe}...`);
// TODO : implémenter la fonction preparerCafe
}
// --- PARTIE 2 : le "Callback Hell" ---
// On imbrique les appels pour garantir l'ordre d'exécution.
// Cette structure en "pyramide" est difficile à lire, à débugger et à maintenir.
// C'est l'exemple parfait de ce que les Promises et async/await permettent d'éviter.
console.log("\n--- Lancement de la préparation (avec Callback Hell) ---");
selectionnerCafe('Expresso', (errSelect, cafeSelectionne) => {
// Chaque étape doit vérifier s'il y a eu une erreur à l'étape précédente.
if (errSelect) {
console.error("Erreur de sélection :", errSelect);
return; // Arrête l'exécution en cas d'erreur.
}
// TODO : appeler "moudreGrains" avec le café sélectionné, puis "chaufferEau", puis "preparerCafe".
});
console.log("\nMessage affiché PENDANT que le café se prépare (non-bloquant).");