Pełne wdzięku wyjście - Graceful exit

Wdzięczne wyjście (lub zgrabna manipulacja ) jest proste programowanie idiom którym Program wykryje poważny błąd warunku i „wyjść z wdziękiem” w kontrolowany sposób w wyniku. Często program wypisuje opisowy komunikat o błędzie do terminala lub dziennika jako część bezpiecznego wyjścia.

Zwykle kod dla łagodnego wyjścia istnieje, gdy alternatywa — pozwalająca na niewykrycie i nieobsłużenie błędu — powodowałaby fałszywe błędy lub późniejsze anomalne zachowanie, które byłoby trudniejsze do debugowania przez programistę . Kod powiązany z bezpiecznym wyjściem może również podejmować dodatkowe kroki, takie jak zamykanie plików , aby zapewnić, że program pozostawi dane w spójnym, możliwym do odzyskania stanie.

Pełne wdzięku wyjścia nie zawsze są pożądane. W wielu przypadkach bezpośrednia awaria może dać programiście możliwość dołączenia debugera lub zebrania ważnych informacji, takich jak zrzut pamięci lub zrzut stosu , w celu zdiagnozowania głównej przyczyny błędu.

W języku obsługującym formalną obsługę wyjątków bezpieczne zakończenie może być ostatnim krokiem w obsłudze wyjątku. W innych językach poprawne wyjścia mogą być zaimplementowane za pomocą dodatkowych instrukcji w miejscach możliwych błędów.

Wyrażenie „wdzięczne wyjście” zostało również uogólnione w odniesieniu do rezygnacji z pracy lub związku w życiu, które się zakończyło.

w Perlu

W języku programowania Perl wdzięczne wyjścia są zazwyczaj implementowane za pomocą operatora matrycy . Na przykład kod do otwierania pliku często wygląda tak:

# Open the file 'myresults' for writing, or die with an appropriate error message.
open RESULTS, '>', 'myresults' or die "can't write to 'myresults' file: $!";

Jeśli próba otwarcia pliku myresultsnie powiedzie się, program zawierający zakończy się komunikatem o błędzie i statusem wyjścia wskazującym na nieprawidłowe zakończenie.

W Javie

W języku programowania Java blok try...catch jest często używany do przechwytywania wyjątków . Cały potencjalnie niebezpieczny kod jest umieszczany wewnątrz bloku i, jeśli wystąpi wyjątek, zostaje zatrzymany lub przechwycony.

try {
    // Try to read the file "file.txt"
    Scanner sc = new Scanner(new File("file.txt"));
    while (sc.hasNextLine())
        System.out.println(sc.readLine());
    sc.close();
} catch(IOException e) {
    // The file could not be read
    System.err.println("The file could not be read. Stack trace:");
    e.printStackTrace();
}

W C

W C, można użyć błędu (3) funkcja zapewniana w GNU przez biblioteki GNU C .

int fd;
if ((fd = open("/dev/urandom", O_RDONLY)) < 0) error(1, errno, "Open failed");

Jeśli pierwszy parametr jest niezerowy, funkcja wyjdzie z procesu nadrzędnego i zwróci ten parametr.

Zobacz też

Bibliografia