Sobes.tech
Middle

V čem spočívá rozdíl mezi výjimkami v Kotlinu a Javě?

sobes.tech AI

Odpověď od AI

Hlavní rozdíl v zacházení s kontrolovanými (checked) výjimkami.

V Javě existují dva typy výjimek:

  • Kontrolované (Checked Exception): vyžadují explicitní ošetření v bloku try-catch nebo deklaraci v signatuře metody klíčovým slovem throws. Příklady: IOException, FileNotFoundException.
  • Nekontrolované (Unchecked Exception): nevyžadují explicitní ošetření. Příklady: RuntimeException a jeho podtřídy, Error.

V Kotlinu neexistují kontrolované výjimky. Všechny výjimky v Kotlinu jsou v podstatě nekontrolované. To zjednodušuje kód, protože není nutné používat try-catch nebo throws u rutinních operací, které mohou vyvolat výjimku.

Příklad v Javě:

// Java
public class FileRead {
    public void readFile() throws IOException { // Je povinné deklarovat
        BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        reader.close();
    }
}

Příklad v Kotlinu:

// Kotlin
import java.io.File

fun readFile() { // Není třeba deklarovat throws
    File("file.txt").forEachLine {
        println(it)
    }
}

Navzdory absenci kontrolovaných výjimek může Kotlin stále vyhazovat a zpracovávat výjimky (například ty, které jsou vyhazovány z Java knihoven), pomocí bloků try-catch-finally. To je pro kompatibilitu s existujícím Java kódem.

// Kotlin
import java.io.IOException

fun readFileSafe() {
    try {
        readFile() // Volání funkce, která může vyhodit IOException
    } catch (e: IOException) {
        println("Chyba při čtení souboru: ${e.message}")
    } finally {
        println("Operace souboru dokončena.")
    }
}

Shrnutí: Kotlin usnadňuje vývoj tím, že odstraňuje nutnost povinného ošetření kontrolovaných výjimek, spoléhá více na výjimky za běhu a na standardní správce chyb tam, kde je to nutné.