[Rio-pm] [Passatempo] Interpretador para BrainFuck

Tiago Peczenyj tiago.peczenyj em gmail.com
Quinta Dezembro 13 04:26:39 PST 2012


Nicole

o when usa smart matching ~~

E a vantagem é um codigo enxuto.

Por exemplo, isto

        if($type ~~ /^[FUP]$/) { code }
        elsif($type ~~ "S")          {  code }
        elsif($type ~~ "B")         {  code }
        else              {  code }

vira isto
    given ($type){
        when(/^[FUP]$/) { code }
        when("S")          {  code }
        when("B")         {  code }
        default              {  code }
    }

a vantagem é que a variavel $type foi usada apenas uma vez. eu não tenho
muito espaço para repeti-la

por outro lado isto não é um switch/case como em C que vc precisa adicionar
um break senão ele cai em todas as condições abaixo - e isso tem algumas
utilidades bizarras.

2012/12/13 Nicole Scherer <bionica2007-perl em yahoo.com>

> Caros,
>
> se entendi bem, o given e o when, assim como o case, são mais das formas
> alternativas ("há muitas maneiras de se fazer a mesma coisa em Perl") de se
> fazer "if-elsif-else" com linguagem mais coloquial. Certo?
>
> Seria o mesmo que:
>
> my $var = 'Carneirao';
> if ($var eq 'Carneirao'){say "Opa, sou eu!";}
> elsif ($var =~ /Sbrebows/){ say 'WTF???';}
> else {say "Nao sei o que quer dizer...";}
>
> Com a vantagem de economizar o ($var eq/=~ ...).
> Correto?
> Ou estou perdendo alguma coisa muito especial, que não percebi ainda?
>
>
> []'s
> Nicole
>
>
>   ------------------------------
> *De:* Andre Carneiro <andregarciacarneiro em gmail.com>
> *Para:* Perl Mongers Rio de Janeiro <rio-pm em pm.org>
> *Enviadas:* Quinta-feira, 13 de Dezembro de 2012 9:36
> *Assunto:* Re: [Rio-pm] [Passatempo] Interpretador para BrainFuck
>
> Meio estranho você não entender when e entender given, mas vamos lá!
> Normalmente eu mandaria um RTFM, mas já estou velho e manso ultimamente...
>
> given é equivalente a 'switch'
>
> when é equivalente a 'case'
>
> Então, se você estiver usando Perl 5.10 ainda,
>
> <code>
> use feature qw/switch say/; #Isso sim, é escroto pra caramba! Se a função
> chama-se 'given', pra que mudar o nome para switch???
> use strict;
> use warnings;
> #Ou dane-se tudo isso e faça 'use common::sense';
>
>
> my $var = 'Carneirao';
>
> given($var){
>    when( 'Carneirao'){
>        say "Opa, sou eu!";
>    }
>    when(/Sbrebows/){
>       say 'WTF???';
>    }
>    default {
>       say "Nao sei o que quer dizer...";
>    }
> }
>
> #Antigamente fazíamos assim:
>
> use Switch;
>
>
> switch($var){
>      case 'Carneirao' { say "Opa, sou eu!";}
>      case /Sbrebows/ {say "WTF";}
>      else { say "Nao sei o que quer dizer";}
> }
>
>
> #Mas, do Perl 5.10 em diante, o módulo Switch está com status
>  'deprecated', então use a primeira opção!
>
> </code>
>
>
> Agora sim! Para mais informações RTFM my friend!!!
>
>
> http://perldoc.perl.org/Switch.html
>
> http://perldoc.perl.org/perlsyn.html#Switch-Statements
>
>
> :-)
> Cheers!
>
>
>
>
> 2012/12/13 breno <breno em rio.pm.org>
>
> 2012/12/12 Aureliano Guedes <guedes_1000 em hotmail.com>:
> > Ainda não tinha me aventurado nas novidades do Perl 5.16.
> >
> > o when eu entendi, mas o given não, alguem poderia me explicar o uso do
> > given??
> >
> > O break ja funciona no 5.16?? se sim, como???
> >
>
> given/when existe no Perl desde a versão 5.10, com direito a default,
> continue e break =)
>
> Pra saber como, dá uma olhada aqui ó:
>
> http://perldoc.perl.org/perlsyn.html#Switch-Statements
>
> tem tudo explicadinho, inclusive o fato de que given() é experimental
> - a forma recomendada de definir o tópico é com for().
>
> Boa diversão!
>
> []s
>
> -b
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
>
> --
> André Garcia Carneiro
> Software Engineer
> (11)982907780
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
Tiago B. Peczenyj
Linux User #405772

http://pacman.blog.br
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20121213/c2e323b9/attachment-0001.html>


Mais detalhes sobre a lista de discussão Rio-pm