
Spracovanie chýb je neoddeliteľnou súčasťou vývoja softvéru. Medzi najčastejšie problémy patria tie, ktoré súvisia s neplatným vstupom. V tomto článku preskúmame význam neplatného vstupu, prečo sa vyskytuje, ako ho efektívne spracovať a ako sa mu vyhnúť.
Neplatný vstup je vstup, ktorý program neočakáva alebo s ktorým nevie správne pracovať. Môže ísť o rôzne formy, ako napríklad nesprávny formát dát, neočakávané znaky, chýbajúce údaje alebo hodnoty mimo povoleného rozsahu.
Neplatný vstup môže mať rôzne príčiny. Používatelia môžu zadávať údaje nesprávne, systémy môžu generovať neočakávané dáta alebo môže dôjsť k chybám pri prenose dát.
Uvažujme jednoduchý program, ktorý rieši rovnicu x² = a. Program vyzve používateľa na zadanie hodnoty pre a. Čo sa stane, ak používateľ nezadá číslo, ale napríklad text? V takom prípade program narazí na problém a môže skončiť neočakávaným spôsobom.
#include <stdio.h>#include <stdlib.h>#include <math.h>int main() { double a, x; printf("solver of equation: x*x = a\n"); printf("Zadajte hodnotu a: "); if (scanf("%lf", &a) != 1) { printf("Chyba: Neplatný vstup. Zadajte číslo.\n"); return 1; // Ukončenie programu s chybovým kódom } x = sqrt(a); printf("Riešenie: x = %lf\n", x); return 0;}V tomto príklade, ak scanf nedokáže prečítať číslo, vráti hodnotu rôznu od 1, čo spustí chybovú hlášku a ukončí program.
Prečítajte si tiež: Podmienky pre prepočet invalidného dôchodku
Overovanie vstupu je proces kontroly, či vstup spĺňa očakávané kritériá. To môže zahŕňať kontrolu typu dát, formátu, rozsahu a prítomnosti požadovaných hodnôt.
Výnimky sú udalosti, ktoré narušujú normálny tok programu. Použitie blokov try-except umožňuje zachytiť a spracovať tieto výnimky elegantným spôsobom.
try: cislo = int(input("Zadajte celé číslo: ")) print("Zadali ste:", cislo)except ValueError: print("Neplatný vstup. Zadajte celé číslo.")except IndexError: print("Neplatný index.")except: print("Nastala neznáma chyba.")Funkcie môžu vracať špeciálne kódy, ktoré indikujú, či došlo k chybe. Volajúci kód potom môže skontrolovať tento kód a podľa toho reagovať.
V jazyku C je možné použiť funkcie setjmp() a longjmp() na implementáciu vzdialených skokov, ktoré umožňujú preskočiť na vopred definované miesto v kóde v prípade chyby.
#include <stdio.h>#include <setjmp.h>#include <stdlib.h>#include <math.h>jmp_buf jump_buffer;int main() { double a, x; int result; result = setjmp(jump_buffer); if (result == 0) { printf("solver of equation: x*x = a\n"); printf("Zadajte hodnotu a: "); if (scanf("%lf", &a) != 1) { printf("Chyba: Neplatný vstup. Zadajte číslo.\n"); longjmp(jump_buffer, 1); // Skok na chybovú sekciu } x = sqrt(a); printf("Riešenie: x = %lf\n", x); } else { printf("Program bol ukončený kvôli chybe.\n"); } return 0;}Pri tvorbe webových stránok je dôležité pamätať na prístupnosť pre všetkých používateľov, vrátane tých so zrakovým postihnutím. WCAG (Web Content Accessibility Guidelines) definujú štandardy pre tvorbu prístupného webového obsahu.
Prečítajte si tiež: Ako invalid získa vyšší dôchodok
Je dôležité zabezpečiť dostatočný farebný kontrast medzi textom a pozadím, aby bol text ľahko čitateľný pre ľudí so zrakovým hendikepom. WCAG definuje minimálne požiadavky na farebný kontrast:
Veľký text znamená aspoň 24px alebo boldový text aspoň 18.5px.
Netextový obsah, ako sú obrázky, videá a grafy, by mal obsahovať alternatívny text. Alternatívny text umožňuje čítačkám obrazovky prečítať popis obrázka zrakovo postihnutým používateľom.
<img src="obrazok.jpg" alt="Popis obrázka">Každý interaktívny prvok na stránke, ako sú odkazy a tlačidlá, by mal mať zrozumiteľný názov. Ak odkaz obsahuje len ikonku, je potrebné použiť atribút aria-label alebo skrytý text, aby čítačka obrazovky vedela prečítať, čo odkaz robí.
<a href="#" aria-label="Stiahnuť"> <svg aria-hidden="true"></svg></a>Formuláre by mali byť prístupné pomocou klávesnice. Medzi jednotlivými inputmi by sa malo dať presúvať pomocou klávesy Tab, select by sa mal dať vyberať pomocou šípok hore/dole a checkbox by sa mal dať označiť medzerníkom. Každý input by mal mať priradený <label> element.
Prečítajte si tiež: Polovičný invalid a vianočné príspevky
<label>Meno: <input type="text" autocomplete="name"></label>Jazyk stránky by mal byť definovaný pomocou atribútu lang v tagu <html>. To umožňuje čítačkám obrazovky použiť správnu výslovnosť a skloňovanie.
<html lang="sk">class NedostatocnyZostatok(Exception): passclass Ucet: def __init__(self, meno, heslo, zostatok=0): self.meno = meno self.heslo = heslo self.zostatok = zostatok def vklad(self, suma): self.zostatok += suma print(f"Na účet {self.meno} vložená suma: {suma}. Nový zostatok: {self.zostatok}") def vyber(self, suma): if self.heslo and self.heslo != input(f'heslo pre {self.meno}?'): raise ValueError('Neplatné heslo') if suma > self.zostatok: raise NedostatocnyZostatok("Nedostatok prostriedkov na účte.") self.zostatok -= suma print(f"Z účtu {self.meno} vybratá suma: {suma}. Nový zostatok: {self.zostatok}")Polymorfizmus umožňuje rôznym objektom reagovať na rovnaké volanie metódy rôznym spôsobom. Preťažovanie operátorov umožňuje definovať, ako sa majú správať štandardné operátory pre vlastné triedy.
class Cas: def __init__(self, hodiny=0, minuty=0, sekundy=0): self.hodiny = hodiny self.minuty = minuty self.sekundy = sekundy def __str__(self): return f"{self.hodiny:02d}:{self.minuty:02d}:{self.sekundy:02d}" def __add__(self, other): if isinstance(other, int): sekundy = self.sekundy + other minuty = self.minuty hodiny = self.hodiny minuty += sekundy // 60 sekundy %= 60 hodiny += minuty // 60 minuty %= 60 hodiny %= 24 return Cas(hodiny, minuty, sekundy) elif isinstance(other, tuple): h, m, s = other sekundy = self.sekundy + s minuty = self.minuty + m hodiny = self.hodiny + h minuty += sekundy // 60 sekundy %= 60 hodiny += minuty // 60 minuty %= 60 hodiny %= 24 return Cas(hodiny, minuty, sekundy) else: raise TypeError("Nepodporovaný typ pre sčítanie.")