Aller au contenu

Gérer une Maybe

La seule façon d'extraire une donnée d'une Maybe est via sa méthode match. Cette méthode oblige de gérer le cas où il n'y a pas de donnée.

Si par exemple dans la méthode expose d'un de nos aggregats vous voulez ajouter une propriété qui est dans une Maybe voici comment faire :

public function expose(): array
{
    $data = [
        'id' => $this->id->toString(),
    ];

    $someProp = $this->someProp->match(
        static fn($value) => $value,
        static fn() => null,
    );

    if (!\is_null($someProp)) {
        $data['someProp'] = $someProp;
    }

    return $data;
}

Le problème de cette approche est qu'on passe par une version moins typée de notre donnée pour effectuer notre logique. Au final on doit gérer 2 fois le cas où la donnée existe, dans le match et le if.

public function expose(): array
{
    $data = [
        'id' => $this->id->toString(),
    ];

    $data = $this->someProp->match(
        static fn($value) => \array_merge(
            $data,
            ['someProp' => $value],
        ),
        static fn() => $data,
    );

    return $data;
}

Cette version permet de ne gérer qu'à un seul endroit si la donnée existe ou non. Les premières fois cette façon d'écrire est moins facile à lire mais ça devient plus simple à manipuler dans le temps.