Изящный выход - Graceful exit

Изящный выход (или изящная обработка ) представляет собой простую идиома программирования в котором программа обнаруживает серьезные ошибки состояния и «выходы грациозно» контролируемым образом в результате. Часто программа выводит описательное сообщение об ошибке на терминал или в журнал как часть постепенного выхода.

Обычно код изящного выхода существует , когда альтернатива - позволяет заблуждение незамеченного и необработанным - будет производить ложные ошибки или позже аномальное поведение , которое было бы более трудным для программиста для отладки . Код, связанный с плавным выходом, может также выполнять дополнительные действия, такие как закрытие файлов , чтобы гарантировать, что программа оставляет данные в согласованном состоянии с возможностью восстановления.

Изящные выходы не всегда желательны. Во многих случаях полный сбой может дать разработчику программного обеспечения возможность подключить отладчик или собрать важную информацию, например дамп ядра или трассировку стека , для диагностики основной причины ошибки.

В языке, поддерживающем формальную обработку исключений , постепенный выход может быть последним шагом в обработке исключения. В других языках изящные выходы могут быть реализованы с помощью дополнительных операторов в местах возможных ошибок.

Фраза «изящный уход» также была обобщена для обозначения прекращения работы или отношений в жизни, которые закончились.

В Perl

В языке программирования Perl изящные выходы обычно реализуются с помощью оператора die . Например, код для открытия файла часто выглядит следующим образом:

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

Если попытка открыть файл myresultsне удалась, содержащаяся программа завершит работу с сообщением об ошибке и статусом выхода, указывающим на аварийное завершение.

В Java

В языке программирования Java блок try ... catch часто используется для перехвата исключений . Весь потенциально опасный код помещается внутри блока и в случае возникновения исключения останавливается или перехватывается.

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();
}

В C

В C можно использовать ошибку (3) функцию, представленную в GNU по GNU C Library .

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

Если первый параметр не равен нулю, эта функция выйдет из родительского процесса и вернет этот параметр.

Смотрите также

Рекомендации