En sanningstabell listar varje möjlig kombination av indata till ett logiskt uttryck, tillsammans med det resulterande utfallet. De ser enkla ut, men de är ett av de mest tillförlitliga felsökningsverktygen du har när ett villkor inte beter sig som du förväntar dig.

Att bygga en från grunden

Anta att du har detta villkor som skyddar åtkomsten till en funktion:

const canAccess = isSubscribed && (isAdmin || !isSuspended);

För att bygga en sanningstabell listar du varje kombination av de tre indata, och går sedan igenom uttrycket steg för steg.

isSubscribed isAdmin isSuspended isAdmin || !isSuspended canAccess
truetruetruetruetrue
truetruefalsetruetrue
truefalsetruefalsefalse
truefalsefalsetruetrue
falsetruetruetruefalse
falsetruefalsetruefalse
falsefalsetruefalsefalse
falsefalsefalsetruefalse

Lägg märke till hur tabellen omedelbart avslöjar ett specialfall: en avstängd administratör (isAdmin = true, isSuspended = true) som är prenumerant får fortfarande åtkomst, eftersom OR låter administratörsflaggan åsidosätta avstängningen. Om det inte var avsikten har sanningstabellen precis hittat din bugg innan dina användare gjorde det.

Hur många rader behöver du?

Antalet rader i en fullständig sanningstabell är 2^n, där n är antalet oberoende booleska indata. Tre indata innebär 8 rader; fyra indata innebär 16. Detta är också en bra påminnelse om att hålla dina villkor små — så snart du passerar 3 eller 4 variabler i ett enda uttryck är det oftast ett tecken på att du bör extrahera namngivna mellanliggande variabler.

// Istället för detta:
if (isSubscribed && (isAdmin || !isSuspended) && !isTrialExpired) { ... }

// Överväg att namnge delarna:
const hasValidStanding = isAdmin || !isSuspended;
const hasActiveAccess = isSubscribed && hasValidStanding && !isTrialExpired;
if (hasActiveAccess) { ... }

När du bör ta till en sanningstabell

Proffstips: din testsvit bör i idealfallet täcka varje rad i sanningstabellen för alla villkor som är komplexa nog att motivera en.