Изящный выход - 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");
Если первый параметр не равен нулю, эта функция выйдет из родительского процесса и вернет этот параметр.
Смотрите также
Рекомендации