[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