Programação D - Tratamento de exceções
Uma exceção é um problema que surge durante a execução de um programa. A exceção AD é uma resposta a uma circunstância excepcional que surge enquanto um programa está sendo executado, como uma tentativa de divisão por zero.
As exceções fornecem uma maneira de transferir o controle de uma parte de um programa para outra. O tratamento de exceções D é baseado em três palavras-chavetry, catch, e throw.
throw- Um programa lança uma exceção quando um problema aparece. Isso é feito usando umthrow palavra-chave.
catch- Um programa captura uma exceção com um tratador de exceção no local de um programa onde você deseja tratar o problema. ocatch palavra-chave indica a captura de uma exceção.
try - A tryblock identifica um bloco de código para o qual determinadas exceções são ativadas. Ele é seguido por um ou mais blocos catch.
Assumindo que um bloco levantará uma exceção, um método captura uma exceção usando uma combinação de try e catchpalavras-chave. Um bloco try / catch é colocado ao redor do código que pode gerar uma exceção. O código dentro de um bloco try / catch é referido como código protegido, e a sintaxe para usar try / catch se parece com a seguinte -
try {
// protected code
}
catch( ExceptionName e1 ) {
// catch block
}
catch( ExceptionName e2 ) {
// catch block
}
catch( ExceptionName eN ) {
// catch block
}
Você pode listar vários catch declarações para capturar diferentes tipos de exceções no caso de seu try block levanta mais de uma exceção em diferentes situações.
Lançando exceções em D
As exceções podem ser lançadas em qualquer lugar dentro de um bloco de código usando throwafirmações. O operando das instruções de lançamento determina um tipo para a exceção e pode ser qualquer expressão e o tipo do resultado da expressão determina o tipo de exceção lançada.
O exemplo a seguir lança uma exceção quando ocorre a divisão por zero -
Exemplo
double division(int a, int b) {
if( b == 0 ) {
throw new Exception("Division by zero condition!");
}
return (a/b);
}
Capturando exceções em D
o catch bloco seguindo o trybloco captura qualquer exceção. Você pode especificar o tipo de exceção que deseja capturar e isso é determinado pela declaração de exceção que aparece entre parênteses após a palavra-chave catch.
try {
// protected code
}
catch( ExceptionName e ) {
// code to handle ExceptionName exception
}
O código acima captura uma exceção de ExceptionNametipo. Se você quiser especificar que um bloco catch deve lidar com qualquer tipo de exceção que é lançada em um bloco try, você deve colocar reticências, ..., entre os parênteses envolvendo a declaração de exceção da seguinte maneira -
try {
// protected code
}
catch(...) {
// code to handle any exception
}
O exemplo a seguir lança uma exceção de divisão por zero. Ele está preso no bloco de captura.
import std.stdio;
import std.string;
string division(int a, int b) {
string result = "";
try {
if( b == 0 ) {
throw new Exception("Cannot divide by zero!");
} else {
result = format("%s",a/b);
}
} catch (Exception e) {
result = e.msg;
}
return result;
}
void main () {
int x = 50;
int y = 0;
writeln(division(x, y));
y = 10;
writeln(division(x, y));
}
Quando o código acima é compilado e executado, ele lê o arquivo criado na seção anterior e produz o seguinte resultado -
Cannot divide by zero!
5