Funderar på vad som är vackrast, bäst och lättlästast (eller mest lättläst):
if (supportingClassNotConfigured(thingToSupport)) { // ---A
if (!supportingClassConfigured(thingToSupport)) { // ---B
if (supportingClassConfigured(thingToSupport) == false) { // ---C
performNoMagic();
} else {
performYesMagic();
}
Min personliga preferens förordar alternativ A pga att jag tycker den är lättast att läsa och ta till sig – där finns inget litet tecken som man kan missa (!) och man behöver inte vända på uttrycket i huvudet för att inse om man går in i blocket (== false).
Jag har dock deltagit i diskussioner kring detta fler än en gång, och då försökt argumentera för att man aldrig skall använda negationer (på samma sätt som null i ett API inbjuder till NullPointerExceptions). Koden ovan borde enligt det argumentet skrivas om så att man frågar efter det icke-negerade tillståndet och låter det utföras i if-satsens block:
if (supportingClassConfigured(thingToSupport)) {
performYesMagic();
} else {
performNoMagic();
}
Ah – jag går och skriver om nu medsamma! :)
