Pochopenie a riešenie problémov s neplatným vstupom

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úť.

Úvod do problematiky neplatného vstupu

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.

Prečo sa neplatný vstup vyskytuje

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.

Príklad z praxe: Riešenie rovnice

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

Techniky spracovania chýb

Overovanie vstupu

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.

Spracovanie výnimiek

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.")

Návratové kódy chýb

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ť.

Vzdialené skoky

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.

Príklad: Rozšírenie jazyka C o vzdialený skok

#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;}

Princípy prístupnosti webového obsahu (WCAG)

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

Nedostatočný farebný kontrast

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:

  • AA rating:
    • Normálny text: 4.5 : 1
    • Veľký text: 3 : 1
  • AAA rating:
    • Normálny text: 7 : 1
    • Veľký text: 4.5 : 1

Veľký text znamená aspoň 24px alebo boldový text aspoň 18.5px.

Chýbajúci alternatívny text

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">

Prázdne odkazy a tlačidlá

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>

Nedostatočná prístupnosť formulárov

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>

Chýbajúci lang atribút

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">

Príklad: Vlastné výnimky v Pythone

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 a preťažovanie operátorov

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.")

tags: #invalid #input #význam