sexta-feira, novembro 23, 2007

O excepcional

O que é ser excepcional? É ser uma excepção à regra algo inesperado ou que foge a um padrão. Vou atribuir o título de Excepcional ao autor da pérola que vou mostrar em seguida e que deveria ser intitulada “Como NÃO utilizar as excepções”.
public void Caller()
{
...
AuthenticateApplication_(appName, appPasswd, out BoolAuthenticated);
if(!BoolAuthenticated)
{
 throw new Exception("Application Authentication is invalid!");
}
...
}

public int AuthenticateApplication_(string StrAppName, string StrAppPass, out bool BoolAuthenticated)
{
BoolAuthenticated = false;
...
try{
  ...
  if(result!= StrAppPass)
  {
    throw new Exception("Invalid Application Authentication! : " + result );
  }
  else
  {
    BoolAuthenticated = true;
  }
  ...
}
catch(Exception e){ 
}
}

5 comentários:

  1. Ahahah, aposto que foi o Pedro Santos o autor de tal maravilha ;-)

    ResponderEliminar
  2. Passa-lhe este texto que eu escrevi para o PEAR:
    http://pear.php.net/pepr/pepr-proposal-show.php?id=132

    É um condensado sobre como usar excepções (em PHP, mas aplica-se a outras linguagens).

    Já agora, a questão de lançar uma excepção ou não num login falhado é válida. Não é tão óbvia como possa parecer. Se procurares na mailing list pear-dev a discussão sobre este documento, ou os comentários na wiki:
    http://wiki.ciaweb.net/yawiki/index.php?area=PEAR_Dev&page=RfcExceptionUse
    vais ver que é uma área cinzenta.

    ResponderEliminar
  3. Ahaha! :P

    Deves pensar que eu aprendi a programar em Aveiro!:-P

    ResponderEliminar
  4. Eu não li muito sobre o assunto, mas tenho opinião enquanto programador do que penso que é correcto. Só deves enviar excepções se tiveres a fazer uma API ou uma framework que será utilizada depois por outras aplicações, ou outras camadas da tua aplicação, mas nunca fazes o catch dela, quem chamar o método é que tem de se preocupar com isso. E só mandares uma excepção no caso de não conseguires recuperar do erro (ex:int xpto = 0/x). Se estás a trabalhar na user interface ou algo que se assemelhe então deves ter sempre try, catch de modo a que o utilizador nunca "apanhe" com excepções, mas sim com mensagens de erro. Opinem!

    ResponderEliminar
  5. Esse código é parvo.

    Não faz sentido nenhum.

    Quem programou isso nem a quarta classe deve ter.

    ResponderEliminar