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