Een logische fout in de programmacode is een fout die er niet voor zorgt dat het programma crasht of een foutmelding geeft, maar er wel voor zorgt dat het programma onjuiste of onverwachte uitvoer produceert. Het is een fout in het ontwerp of algoritme van het programma, wat leidt tot foutieve redeneringen of berekeningen.
In tegenstelling tot syntaxisfouten (die voorkomen dat de code wordt gecompileerd of uitgevoerd) of runtime-fouten (die ervoor zorgen dat het programma crasht tijdens de uitvoering), zijn logische fouten subtiel en moeilijker te detecteren omdat het programma normaal lijkt te werken. De fout ligt in het *wat* het programma doet, niet in het *hoe*.
Hier zijn enkele voorbeelden ter illustratie:
* Onjuiste berekening: Een programma dat bedoeld is om het gemiddelde van drie getallen te berekenen, zou ze kunnen optellen in plaats van optellen en vervolgens delen door drie. Het programma wordt uitgevoerd, maar het resultaat is verkeerd.
* Af-voor-één-fout: Een lus kan een keer te veel of te weinig worden herhaald, wat leidt tot onjuiste resultaten of toegang tot gegevens buiten de array-grenzen (hoewel dit laatste zich kan manifesteren als een runtime-fout, afhankelijk van de taal en de omgeving).
* Onjuiste voorwaardelijke logica: Een 'if'-instructie kan een voorwaarde hebben die de beoogde logica niet accuraat weergeeft. Het gebruik van `>` in plaats van `>=` kan er bijvoorbeeld toe leiden dat een benodigd geval wordt uitgesloten.
* Oneindige lus: Een lus die nooit eindigt omdat nooit aan de uitgangsvoorwaarde wordt voldaan. Hoewel dit misschien een runtimefout lijkt, is het in wezen een logische fout in het ontwerp van de lus.
* Onjuist gebruik van variabelen: Het gebruik van de verkeerde variabele, of het per ongeluk voortijdig overschrijven van de waarde van een variabele, kan tot onverwachte resultaten leiden.
Logische fouten zijn vaak het moeilijkste type bug om te vinden en op te lossen, omdat ze een zorgvuldig onderzoek van het algoritme en de stroom van het programma vereisen om de bron van de gebrekkige redenering te identificeren. Foutopsporingstechnieken zoals het gebruik van printinstructies (om variabele waarden op verschillende punten te inspecteren) of het gebruik van een debugger (om regel voor regel door de code te stappen) zijn essentieel voor het vinden en oplossen van logische fouten. |