[SP-pm] DIE - Módulo Autoritários

Blabos de Blebe blabos at gmail.com
Tue Aug 26 20:42:12 PDT 2008


Ok,

Seu RTFM foi bem esclarecedor. Não pelo que diz, mas pelo que me fez entender.

Quanto às cervejas, dispenso. Já tenho idade pra comprar as minhas ;)

Hoje foi um dia onde eu me expressei especialmente mal então vamos por partes.

Apesar de a discussão ter se iniciado com um exemplo real, e esta ser
uma lista de Perl, enquanto todo mundo estava falando de Perl e de
File::Path, eu, completamente fora do contexto estava falando de
design de bibliotecas numa linguagem arbitrária. Quando todo mundo
estava falando de die, função do Perl, eu estava ralando de die no
sentido de exit(), completamente fora do contexto. Por este equívoco
eu peço desculpas, principalmente ao Fernando que estava tentando me
alertar para isso no GTalk.

Apesar de não parecer, é muito mais comum do que se imagina, encontrar
por aí, código mal escrito que não deixa claro o que está acontecendo.
Aos que conviveram com isso, devem se lembrar de um tal módulo de
rastreamento de aeronaves de um certo projeto, que continha exatamente
72 exit(0) dentro do seu algoritmo. Detalhe: exit('zero'), vai
rastrear de onde veio, vai! E vão se lembrar também quantas bruxas
foram queimadas na fogueira, até chegar nele. O típico caso de quebra
dentro de biblioteca (Não, não era die()). No mesmo projeto também
tinha uma biblioteca de logs, que matava aplicação, se não conseguisse
mais gravar log. Como descobrimos isso? Lá pelas 4 da manhã de um fim
de semana qualquer, enquanto o infeliz que fez a m&rd@ estava em casa
sonhando com try/catch. Eu sempre disse para nunca colocar
programadores java pra fazer trabalho de homem, mas...

Quebrar a aplicação por causa de um exit, abort, e família numa
biblioteca é inadmissível. Sim eu também fui infeliz ao utilizar a
palavra módulo no sentido de biblioteca.

Eu sou particularmente arcaico quando se fala de exceptions. Hoje em
dia, é fácil achar em certos cursos de TI, carinha ensinando

#!/usr/bin/perl

eval {
...
};

$@ && print 'Foda viu'.$/

No livro do Bjarne Stroustrup, The C++ Programming Language, capítulo
8, lá pela página 180, tem um exemplo de cunho didático que é
constantemente extrapolado para o mundo real

int main(int argc, char** argv){
    try{
        // Tente fazer qualquer coisa de qualquer jeito
    }
    catch(...) {
        // Capture todas as exceções e salve a minha pele.
    }
}


Só peço mais uma vez desculpas por viajar fora do contexto da thread.

Abraços


2008/8/26 Luis Motta Campos <luismottacampos em yahoo.co.uk>:
> Blabos de Blebe wrote:
>>
>> Eu nao afirmei que nao é pra tratar excecoes, muito pelo contrario.
>> Agora chamar die de exception, é brincadeira. Voce tá me zuando, né!?
>
> Como sempre, RTFM. Do manual do perl (perldoc -f die):
>
> die LIST
>  Outside an "eval", prints the value of LIST to "STDERR" and exits with the
> current value of $! (errno).  If $! is 0, exits with the value of "($? >>
> 8)" (backtick 'command' status).  If "($? >> 8)" is 0, exits with 255.
>  Inside an "eval()," the error message is stuffed into $@ and the "eval" is
> terminated with the undefined value.  *This* *makes* *"die"* *the* *way*
> *to* *raise* *an* *exception*.
>
> Grifo meu.
>
> Sem comentários, Blabos. Não tem cerveja trapista para você da próxima vez
> que eu for ao Brasil. ;)
>
> Putamplexos.
> --
> Luis Motta Campos is a software engineer,
> Perl Programmer, foodie and photographer.
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>


More information about the SaoPaulo-pm mailing list