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.