Drie antwoorden
Heeft een bedrijf een webshop? Het antwoord is ja, nee of weten we niet. Een veld met twee standen kan er maar twee kwijt. Kies je false als standaard, dan wordt weten we niet stil nee.
Hetzelfde geldt voor getallen en lijsten. Nul open vacatures is iets anders dan een aantal dat je niet kent, en een lege lijst iets anders dan een lijst die je niet kent.
| Betekenis | Waarde |
|---|---|
| Bekend | de waarde |
| Nee, nul of geen | false, 0 of [] |
| Onbekend | null |
In je database
Laat de kolom null toe, en geef hem geen standaardwaarde:
create table companies (
kvk_number char(8) primary key,
webshop boolean, -- null: onbekend
open_vacancies integer, -- null: onbekend
known_count integer not null
);
Rekenen met onbekend
avg en count(kolom) slaan null over. Dat is wat je wilt: het gemiddelde gaat over de bedrijven waarvan je het weet.
-- het gemiddelde van de bedrijven waarvan we het weten
select avg(open_vacancies) from companies;
-- fout: onbekend telt nu mee als nul
select avg(coalesce(open_vacancies, 0)) from companies;
count(*) telt de rijen, ook die met null. Zet de twee naast elkaar, dan zie je hoeveel je weet.
In je code
Een vergelijking als if (!company.webshop) behandelt null als false. Vergelijk daarom precies:
if (company.webshop === null) show('onbekend')
else if (company.webshop) show('webshop')
else show('geen webshop')
Op het scherm
Toon onbekend als het woord onbekend. Een streepje of een leeg vak lijkt op nee, of op een fout.
Bij Achtcijfers
Een veld dat we niet kennen, is in de API null. Het object known telt de velden die we wel kennen, als getal: dan kun je sorteren en filteren, bijvoorbeeld op bedrijven waarvan je ten minste vijf velden weet. Een false, 0 of [] telt daarbij als bekend. Meer op API.