Maybe är en datastruktur som är rätt så praktisk att ha. Man använder den när det inte är säkert att det finns någon data men man vill inte göra specialfall som kollar om så är fallet.
I många funktionella språk så används den som returtyp där vanliga språk hade haft möjligheten att returnera null
Vad är då Maybe. Ja det är en algebraisk datatyp. En sumtyp. I TypeScript kallas dom tagged unions. Vad är nu det? Det är en datatyp som kan vara två olika datatyper. Tänk en abstrakt basklass och två barknklasser som har den som förälder. Fast bättre. Om du har en funktion som kan returnera två olika typer av värden så är det alltid problem att modellera det. Man kan returnera någon form av datastruktur som innehåller både strängen och numret
Det är för sådana scenarion som en tagged-union är perfekt att använda. Det är ett sätt att fånga t.ex. affärslogik på ett enkelt och bra sätt. Den här metoden kan antingen returnera en ansökan eller ett Felmeddelande till handläggaren
Hur det fungerar i detalj tänker jag inte gå in på men det är i alla fall grunden till hur man gör en Maybe struktur.
Maybe är just en sådan tagged-union som kan vara Just eller Nothing. Just är en generisk datatyp så den kan innehålla vad som helst. Man kan se hela Maybe som en låda som man stoppar värden i. Det är oftast så dom förklaras. Sedan finns det funktioner som vet hur man manipulerar det lagrade värdet i lådan.
Så här är en enkel implementation av Just och Nothing
Och så gör vi en tagged-union av det hela. Det här innebär att vi har en typ som heter Maybe som kan vara antingen Nothing eller Just det här kan man göra med alla möjliga typer.
Nu har vi alltså en datastruktur som gör att man inte behöver kolla om det finns ett värde eller inte. Vi kan jobba på samma sätt oavsett det!
Problemet nu är ju att vi aldrig har vårt värde. Vi har bara värdet fast i vår lilla låda. Men bli inte rädd! Vi gör en funtion för att plocka värdet ur en Maybe! Här får vi ange ett värde ifall det inte finns något.
Vill man då använda det i verkligheten är något i stil med det här bra. Den tar ett värde och är det null eller undefined så blir det nothing annars stoppar den värdet i vår låda
Här har vi en ful funktion. Den returnerar ibland null och ibland siffror. Jag har i alla fall varit nog snäll och berättat det men det behövs ju inte ens! Dåligt!
Allt det här är toppen. Den stora styrkan är att man inte behöver kolla saker hela tiden utan man kan göra på ett sätt rakt igenom och låta datastrukturen hantera när det blir avvikelser. Det finns andra strukturer som likar den här och dom är alla mycket kraftfulla och vet man bara om dom så är det lätt att använda.