Estou tentando convencer o líder da minha equipe a permitir o uso de exceções em C ++ em vez de retornar um bool isSuccessful
ou uma enumeração com o código de erro. No entanto, não posso contrariar essa crítica dele.
Considere esta biblioteca:
class OpenFileException() : public std::runtime_error {
}
void B();
void C();
/** Does blah and blah. */
void B() {
// The developer of B() either forgot to handle C()'s exception or
// chooses not to handle it and let it go up the stack.
C();
};
/** Does blah blah.
*
* @raise OpenFileException When we failed to open the file. */
void C() {
throw new OpenFileException();
};
Considere um desenvolvedor chamando a
B()
função Ele verifica sua documentação e vê que ela não retorna exceções, para não tentar pegar nada. Esse código pode travar o programa em produção.Considere um desenvolvedor chamando a
C()
função Ele não verifica a documentação, portanto não captura nenhuma exceção. A chamada é insegura e pode travar o programa em produção.
Mas se verificarmos erros desta maneira:
void old_C(myenum &return_code);
Um desenvolvedor que use essa função será avisado pelo compilador se ele não fornecer esse argumento e ele diria "Aha, isso retorna um código de erro que devo verificar".
Como posso usar exceções com segurança, para que haja algum tipo de contrato?
Either
/ Result
mônada para retornar o erro de uma forma combináveis tipo seguro