In de programmeertaal C was het vanaf het begin toegestaan om haakjes weg te laten voor een enkele instructie binnen een if-constructie. Dit maakte de code compacter, maar veroorzaakte tal van onduidelijke fouten, vooral bij uitbreiding en aanpassing. De historische reden hiervoor is ruimtebesparing en eenvoud van de syntaxis voor minimalistische gevallen.
Het probleem ontstaat wanneer een ontwikkelaar vergeet dat zonder haakjes de if alleen de eerste uitdrukking erna beheert: alle volgende worden altijd uitgevoerd, zelfs als het visueel niet duidelijk lijkt. Deze stijl leidt tot verborgen bugs, die moeilijk te herkennen zijn bij het lezen van de code en tot fouten door vergeten inspringingen of het toevoegen van nieuwe regels.
De oplossing is om altijd haakjes te gebruiken, zelfs als er maar één instructie is. Dit verhoogt de leesbaarheid en veiligheid van de code.
Voorbeeld van code:
// Slecht: if (x > 0) doe_iets(); do_andere(); // Altijd uitgevoerd // Beter: if (x > 0) { doe_iets(); doe_andere(); }
Belangrijke kenmerken:
Beïnvloedt inspringing (tab/space) de scope van if?
Nee, in de programmeertaal C wordt de scope alleen bepaald door haakjes, niet door inspringingen.
Wat voor gedrag zal deze code hebben?
if (a > 0) fun1(); fun2();
fun1() zal alleen worden aangeroepen als a > 0. fun2() zal altijd worden aangeroepen, ongeacht de voorwaarde.
Wat zijn de gevolgen als je bij het toevoegen van een nieuwe regel vergeet haakjes toe te voegen?
Deze code kan het gedrag veranderen en leiden tot fouten die visueel moeilijk te detecteren zijn, aangezien inspringingen geen bescherming bieden tegen compilerfouten.
Een ontwikkelaar voegde een tweede instructie toe aan een inline if zonder haakjes toe te voegen.
if (user) initialiseer(); log_toegang();
Voordelen:
Nadelen:
Een ontwikkelaar gebruikt altijd haakjes, zelfs voor één instructie:
if (user) { initialiseer(); log_toegang(); }
Voordelen:
Nadelen: