Sobes.tech
Middle

Ποια είναι η διαφορά μεταξύ εξαιρέσεων σε Kotlin και Java;

sobes.tech AI

Απάντηση από AI

Η κύρια διαφορά στη διαχείριση των ελεγχόμενων (checked) εξαιρέσεων.

Στην Java υπάρχουν δύο τύποι εξαιρέσεων:

  • Ελεγχόμενες (Checked Exception): απαιτούν ρητή διαχείριση σε μπλοκ try-catch ή δήλωση στη υπογραφή με τη λέξη-κλειδί throws. Παραδείγματα: IOException, FileNotFoundException.
  • Μη ελεγχόμενες (Unchecked Exception): δεν απαιτούν ρητή διαχείριση. Παραδείγματα: RuntimeException και οι υποκλάσεις της, Error.

Στην Kotlin δεν υπάρχουν ελεγχόμενες εξαιρέσεις. Όλες οι εξαιρέσεις στην Kotlin είναι ουσιαστικά μη ελεγχόμενες. Αυτό απλοποιεί τον κώδικα, καθώς δεν χρειάζεται να χρησιμοποιείτε try-catch ή throws για ρουτίνα λειτουργίες που μπορεί να προκαλέσουν εξαίρεση.

Παράδειγμα σε Java:

// Java
public class FileRead {
    public void readFile() throws IOException { // Υποχρεωτικό να δηλωθεί
        BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        reader.close();
    }
}

Παράδειγμα σε Kotlin:

// Kotlin
import java.io.File

fun readFile() { // Δεν χρειάζεται να δηλώσετε throws
    File("file.txt").forEachLine {
        println(it)
    }
}

Παρόλο που δεν υπάρχουν ελεγχόμενες εξαιρέσεις, η Kotlin μπορεί ακόμα να ρίξει και να διαχειριστεί εξαιρέσεις (όπως αυτές που ρίχνονται από βιβλιοθήκες Java), χρησιμοποιώντας μπλοκ try-catch-finally. Αυτό γίνεται για συμβατότητα με υπάρχοντα κώδικα Java.

// Kotlin
import java.io.IOException

fun readFileSafe() {
    try {
        readFile() // Κλήση λειτουργίας που μπορεί να ρίξει IOException
    } catch (e: IOException) {
        println("Σφάλμα ανάγνωσης αρχείου: ${e.message}")
    } finally {
        println("Ολοκλήρωση λειτουργίας αρχείου.")
    }
}

Συνοπτικά: η Kotlin απλοποιεί την ανάπτυξη, αφαιρώντας την ανάγκη για υποχρεωτικό χειρισμό ελεγχόμενων εξαιρέσεων, βασιζόμενη περισσότερο σε εξαιρέσεις χρόνου εκτέλεσης και στη χρήση τυπικών διαχειριστών σφαλμάτων όπου χρειάζεται.