Chyby
Každý z programátorov sa stretáva s rôznymi chybami v kóde alebo vo fungovania programu. Ako sa hovorí, komu nevyhodil kompilátor chybu, akoby ani neprogramoval. Chyby sa môžu objaviť či už kvôli malým skúsenostiam s programovaním, nevhodná implementácia na nejaký konkrétny problém alebo čo je časté, obrovská komplikovanosť programu a programátor nemôže pri obrovských projektov všetko ustriehnuť.
Poznáme tri typy chýb, ktoré sa počas programovania stretnete:
-
compile-time error,
-
run-time error,
-
logic error.
Compile-time errors
Do kategórie compile-time errors môžeme zaradiť všetky chyby, ktoré vzniknú kvôli nesprávneho použitia gramatiky programovacieho jazyka.
Aby sme si nejakú analógiu zo života dali, tak napríklad skloňovanie slov. Alebo chceme vyjadriť množné číslo nejakého podstatného mena a nepovieme dve žena, ale dve ženy. Podobne ako v gramatike materinského alebo akéhokoľvek jazyka používaného ľuďmi na dorozumievanie, tak i syntax jazyka C++ sa riadi svojimi pravidlami. Na naše chyby v hovoriacom jazyku nás upozorní poslúchajuca protistrana, chyby vzniknuté nedodržaním syntaxe v jazyku C++ nás upozorní kompilátor. A tieto chyby sa zgrupujú do kategórie compile-time errors.
Fajn, aby som len vyčerpavajúco nerozprával, dáme si rafinovaný príklad len na ukážku nejakej chyby. Predpokladám ale, že keď ste sa dostali v rámci seriálu až tu, tak tých syntaktických chýb ste si už užili až až.
1. program: Náročky urobíme compile-time errors
#include <iostream> using namespace std; int main() { string name; cout << "Ahojky, ako sa volas?\n"; cin >> name; cout << "Moc pekne meno a kde byvas?\n"; string address; cin >> address; cout << "Ako fakt nechcem byt doterna a ani nie som ziadna agentka, ale kde sa prave nachadzas?\n"; cin >> act; cout << "Och senzacne, som nablizku teba, cakaj tam kde si, stretneme sa!\n"; return 0; }
Výsledok programu:
error: 'act' was not declared in this scope
Rozbor programu: Chybu sme urobili tam, že sme nedeklarovali reťazec act, čo je hrubé porušenie syntaxe jazyka C++. A kompilátor nás nato upozorní, aby sme chybu opravili.
Run-time errors
Ďalšia kategória chýb je run-time errors. Je to taká chyba, ktorá sa vyskytne cez beh programu. Veľmi častým je nedovolená manipulácia s pamäťou a vzniklé pretečenie pamäti, po anglický už notorické známe slovo overflow. Ako vhodnú ukážku chyby behom aktivity programu by som dal problém delenia. Viac v príklade.
2. program: Skúška na run-time errors
#include <iostream> using namespace std; int main() { cout << "Ideme delit! To len, aby si vedel, co sa bude diat.\n"; cout << "Zadaj celociselny citatel!\n"; int citatel; cin >> citatel; cout << "Zadaj celociselny menovatel!\n"; int menovatel; cin >> menovatel; cout << "Vysledkom delenia cisel "<<citatel<< " a "<<menovatel<<" je: " << citatel/menovatel; return 0; }
Výsledok programu:
Ideme delit! To len, aby si vedel, co sa bude diat. Zadaj celociselny citatel! 20 Zadaj celociselny menovatel! 5 Vysledkom delenia cisel 20 a 5 je: 4
Rozbor programu: Program beží v poriadku, ak do menovateľa nezadáme 0. Akonáhle to urobíte, program zrazu „zblbne“, pretože nulou deliť je zakazané!
Logické chyby
Logické chyby nie sú klasické chyby syntaxe alebo vznikajúce pri behu programu. Do logických chýb patria všetky chyby, ktoré nám kazia účel programu. Napríklad chceme vypočítať priemer ale namiesto sčítania jednotlivých hodnôt ich odčítame a následne vydelíme počtom hodnôt. Syntakticky aj beh programu je v poriadku, ale získaný výsledok nekorešponduje s požadovaným výsledkom.