Tutoriel Vidéo Algorithmique Instancier des pancakes

Télécharger la vidéo

Dans cette nouvelle vidéo je vous propose de découvrir ensemble comment instancier des pancakes.

Construisons notre classe

La première étape consiste à définir notre classe et les propriétés dont nous allons avoir besoin pour la suite de l'éxécution de notre script.

class Pancake {

    public static farine = new Farine(150 * GRAMME)
    public static levure = new Levure(CUILLERE_CAFE, {type: 'chimique'})
    public static sucre = new Sucre(CUILLERE_SOUPE * 2, {type: 'vanillé'})
    public static sel = new Sel(1 * PINCEE)
    public static oeufs = [new Oeuf(), new Oeuf()]
    public static lait = new Farine(200 * ML)

}

Afin de bien séparer les choses nous allons créer une méthode pour obtenir la pâte qui nous servira par la suite.

class Pancake {

    // ...

    public static function async makePate(): PateInterface
    {
        const {jaune, blanc} = OeufSeparator.separate(this.oeufs)
        const recipient = new Recipient(this.farine, this.levure, this.sucre, this.sel, jaune, lait)
        const neige = await blanc.battre()
        await recipient.melanger()
        await recipient.ajouterEnMelangeant(neige)
        return recipient.getContent()
    }

}

Maintenant nous allons pouvoir utiliser cette méthode pour la méthode qui nous servira de factory pour nos pancakes.

class Pancake {

    // ...

    public function async make(): Pancake[]
    {
        const pate = await this.makePate()
        const pancakes = []
        const poele = new Poele();
        while (pate.length > 0) {
            let pancake = new Pancake(pate)
            await poele.cuire(pancake)
            pancakes.push(pancake)
        }
        return pancakes
    }

}

Et voila nous avons maintenant tous les éléments pour instancier les pancakes.

Récapitulatif

Voila ce que donne maintenant notre classe finale.

class Pancake implements PoelableInterface {

    public static farine = new Farine(150 * GRAMME)
    public static levure = new Levure(CUILLERE_CAFE, {type: 'chimique'})
    public static sucre = new Sucre(CUILLERE_SOUPE * 2, {type: 'vanillé'})
    public static sel = new Sel(1 * PINCEE)
    public static oeufs = [new Oeuf(), new Oeuf()]
    public static lait = new Farine(200 * ML)

    public estCuit = false
    public pate: Pate

    public static function async makePate(): PateInterface
    {
        const {jaune, blanc} = OeufSeparator.separate(oeufs)
        const recipient = new Recipient(this.farine, this.levure, this.sucre, this.sel, jaune, lait)
        const neige = await blanc.battre()
        await recipient.melanger()
        recipient.add(neige)
        await recipient.melanger()
        return recipient.getContent()
    }

    public function async make(): Pancake[]
    {
        const pate = await this.makePate()
        const pancakes = []
        const poele = new Poele();
        while (pate.length > 0) {
            let pancake = new Pancake(pate)
            await poele.cuire(pancake)
            pancakes.push(pancake)
        }
        return pancakes
    }

    public function constructor (pate: Pate) {
        this.pate = pate.getLouche()
    }
}

Améliorations

La plupart de nos étapes s'exécutent les unes à la suite des autres. Il serait possible d'optimiser les opérations en parallélisant certaines opérations mais cela nécessiterait plusieurs corps.