Vet ej är inte noll
Varför våra predikat har tre värden, och vad som hände med ett nyckeltal som räknade omätt som misslyckat.
Ett nyckeltal i ett system vi arbetade med tidigare sa att nästan två av tre kundmöten uteblev. Säljarna fick höra det på möten. Det stämde inte. De flesta av mötena var aldrig mätta: ingen hade markerat utfallet, och koden räknade allt som inte var markerat som uteblivet.
Felet var inte en bugg i en rad. Det var att systemet bara hade två värden för något som har fler.
Fyra saker som ser likadana ut
En talrad i Revelius kan vara i fyra lägen som alla frestar att visas som en nolla eller ett streck:
- 0: vi mätte, och det var noll. - null: värdet saknas, till exempel för att ingen fyllde i det. - omätt: vi har ingen mätpunkt för det här än. - ej aktuellt: frågan gäller inte, som elförbrukning på en tältplats utan stolpe.
Regeln är att ingen av dem får renderas som en annan. "Vet ej" visas som vet ej.
Tre värden i domänen
Samma tanke finns i alla våra predikat, från grindar till betyg. De har tre utfall:
@type utfall :: :uppnadd | :ej_uppnadd | :vet_ej
Det viktiga är vart osäkerheten går. Okänt blir aldrig uppnått:
def varde(%Korare{slutsats: :success}), do: :uppnadd
def varde(%Korare{slutsats: :failure}), do: :ej_uppnadd
def varde(%Korare{}), do: :vet_ej
Och okänt blir inte heller misslyckat. En grön körning som inte är bunden till rätt åtagande ger :vet_ej med skälet korning_ej_bunden, inte ett godkänt. En grön körning på main är inte ett betyg åt vilket åtagande som helst.
Servern skickar täljare och nämnare
Det andra halvan av regeln: vyn räknar aldrig fram en kvot. Servern levererar täljaren, nämnaren och klockslaget, och vyn sätter ihop dem.
%{tal: 14, av: 16, enhet: "platser", matt_at: ~U[2026-10-12 19:16:00Z]}
blir "14 av 16 platser · 21:16". Aldrig "88 %". En procentsats döljer hur stort underlaget är, och den döljer helt att underlaget kan vara noll. "0 av 0" och "0 %" är inte samma påstående.
Ärligheten kostar en rad
Det är lätt att se det här som noggrannhet för sin egen skull. Men varje gång ett system säger noll när det menar vet ej fattar någon ett beslut på fel grund. Säljaren som fick höra att två av tre kunder uteblev fattade ett. Tre värden i stället för två kostar en rad i en typ och en gren i en funktion. Det är billigt.
Ett tal utan nämnare är en åsikt med decimaler.
Skrivet av Tavus Sweden AB, som bygger Revelius i Elixir. Fler texter.