Úvod do chýb
V tomto seriáli sme sa už o chyby obtreli v staršej časti seriálu. Avšak, bolo to len také dotknutie sa tejto problematiky. Táto problematika je zaujímavá a prínosná i pre začiatočníkov. Tak poďme si o tom niečo povedať.
Samotné chýby delíme na compile-time chyby, run-time chyby a logické chyby.
Compile-time chyby
Do kategórie compile-time chyby patria všetky prehrešky, ktoré spáchame na syntaxi jazyka StarBasic. Stačí ak zabudnete na nejakú bodku a hneď máme na krku chybovú hlášku. Tak ako je potrebné dodržovať gramatiku v materinskom jazyku (alebo hocijakom inom ľudskom jazyku) tak pri programovacích jazykoch je to obzvlášť dôležité. Bez toho by váš chudáčik procesor nevedel rozlúštiť, čo od neho chcete. Preto je dodržiavanie gramatiky veľmi dôležité a ak tento požiadavok nesplníte, program sa nespustí.
1. program: Ukážka na compile-time errors
Sub Example REM začiatok procedúry Dim x As Integer REM deklarácie premenných Dim y As Integer Dim z As Integer x = 5 REM priradenie hodnôt premenným y = 6 z = 7 REM výpis na obrazovku MsgBox "Mocnina: čísla: " & x & " je " & x^2 & Chr(10) & "Mocnina: čísla: " & y & " je " & y^2 & Chr(10) & "Mocnina: čísla: " & z & " je " & z^2 & Chr(10) & "Koniec programu". End Sub REM koniec procedúry
Chybová hláška
Rozbor makra:
Kód vyzerá v poriadku na prvý pohľad. Ale kde je zrada? Síce sme neurobili žiadnu skomoloneninu mien
príkazov a rovnako sme neporušili žiadny deklaračný proces premenných. Avšak, každý nadbytočný znak tam, kde
nemá byť je chybou. V tomto prípade bodka sa nemôže nachádzať mimo reťazca.
Run-time chyby
Run-time chyby si prostredie pri kontrole makra pred spustením nevšimne. Je to ten druh chýb, ktoré sa vyvinú počas behu makra. Medzi ne patrí napr. presah poľa mimo vymedzený rozsah. Pri tomto type chýb sa najviac spomína problém s delením 0. Ako vieme na jedno základné pravidlo z matematiky, že nulou nikdy nedelíme. Pri run-time chybách môžeme makro bez problémov spustiť. Počas behu makra sa môže run-time chyba prejaviť. Obvykle nás nato upozorní chybová hláška a makro sa zastaví.
2. program: Príklad na run-time chybu pri delení nulou.
Sub Example Dim pole(3 To 6) As Integer pole(3) = 2 pole(4) = 10 pole(5) = 44 pole(6) = 11 MsgBox "Vitam ta užívateľ! Niečo ti ukážem! Nie neboj sa, žiadný vírus, prisahám!" Dim x As Integer x = 2 Dim y As Integer Dim retazec As String For i = 3 To 6 REM cyklus retazec = retazec & pole(i)/x & Chr(10) If i = 6 Then REM podmienka retazec = retazec & pole(i)/y & Chr(10) End If Next MsgBox retazec End Sub
Hláška
Chybová hláška
Rozbor makra: Na začiatku definujeme pole s indexami od 3 do 6. Následne k prvkom poľa s indexami priradíme hodnoty. Vytvoríme cyklus, v ktorom každý prvok poľa vydelíme číslom dva. Ak cyklus narazí na index šesť, tak sa splní podmienka a vtedy šiesty prvok poľa bude vydelený nulou. A pri tejto nedovolenej operácii sa má program zrúbať za asistencie chybovej hlášky.
V treťom programe si ukážme presah mimo pamäte. Len mierne modifikujeme kód 2. programu.
3. program: Príklad na run-time chybu pri presahu poľa
Sub Example Dim pole(3 To 6) As Integer pole(3) = 2 pole(4) = 10 pole(5) = 44 pole(6) = 11 MsgBox "Vitam ta užívateľ! Niečo ti ukážem! Nie neboj sa, žiadný vírus, prisahám!" Dim x As Integer x = 2 Dim y As Integer Dim retazec As String For i = 3 To 7 retazec = retazec & pole(i)/x & Chr(10) Next MsgBox retazec End Sub
Hláška
Chybová hláška
Rozbor makra: Tentoraz má cyklus prebiehať od indexu 3 až 7. Ale index poľa s číslom 7 sme nedeklarovali. Výsledok rovnaký ako pri druhom príklade. Stopka pre program a vypísanie chybovej hlášky.
V druhom diele budeme pokračovať logickými chybami a predstavíme si pár fintičiek pri práce s chybami v makrách.