[Triangulo-pm] [Perl 5.10] o operador "default"

Adriano Ferreira a.r.ferreira em gmail.com
Segunda Novembro 19 06:02:56 PST 2007


Entre as novidades do Perl 5.10 (cujo release candidate 1 chegou ao
CPAN neste sábado -
http://search.cpan.org/~rgarcia/perl-5.10.0-RC1/), temos um novo
operador. É o operador '//' conhecido como operador 'default' ou
'defined-or'.

O propósito deste operador é muito similar ao operador '||' (que
corresponde a um OU) com algumas diferenças sutis e úteis.

O operador '||' é avaliado assim

exp1 || exp2 = exp1,    se o resultado da exp1 é verdadeiro
exp1 || exp2 = exp2,    caso contrário

Como este operador existe há muito tempo no Perl é muito comum que ele
seja usado quando é desejável que uma expressão tenha um certo valor
(ou 'default') se ele não for especificado explicitamente.

Por exemplo,

sub rule {
       my $n = $_[0];
       my $char = $_[1] || '-';
       return $char x $n;
}

constrói uma régua de $n caracteres com o caracter especificado ou '-'.

Assim,

rule(3)      retorna      '---'
rule(4,'+')  retorna     '++++'

No entanto,

rule(5, 0)    retorna   '-----'

porque 0 é *falso* (assim como os outros valores de falso: '' - o
string vazio, 0 - zero inteiro, 0.0 - zero em ponto flutuante, undef).

Antes, a solução era trocar a expressão simples " $_[1] || '-' " por
um mais complicada e precisa:

    my $char = defined $_[1] ? $_[1] || '-'; # atenção ao jogo para
evitar os efeitos colaterais do shift

Mas a semântica do operador '//' é exatamente esta:

exp1 || exp2 = exp1,    se o resultado da exp1 é definido (não é 'undef')
exp1 || exp2 = exp2,    caso contrário

Então a expressão corrigida fica mais concisa e elegante:

    my $char = $_[1] // '-';

Assim, para inúmeras aplicações que antes empregariam o '||' com o
temor de que outros valores de falso levassem a surpresas, a melhor
alternativa é agora o uso do 'defined-or'.

----

Peço aos assinantes desta lista que divulguem esta lista. Ela pode (e
deve) se tornar um lugar para trocar experiências sobre a linguagem
Perl e a programação com ela. A audiência a ser atingida é tão variada
quanto se puder pensar: quem é curioso com programação, quem está
iniciando com Perl, quem já sabe muito e quer compartilhar. Todos são
bem vindos. Eu gostaria muito também que a participação de quem mora
no Triângulo Mineiro aumentasse e formássemos um grupo interessado e
familiarizado com a linguagem Perl (que é ótima para fazer o que você
precisa -- e se chegarem perto o bastante para ver, verão que não é só
propaganda).

Saudações,
Adriano Ferreira


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