[SP-pm] Dúvida entre Scalar Context e List Context

Solli Honorio shonorio at gmail.com
Wed Mar 24 03:53:42 PDT 2010


Realmente parece que esta discusão foi bem produtiva, e gostei muito da
maneira como você explicou o 'contexto', que na minha opinião é a parte mais
importante nesta história. Se você não tiver objeção, vou utilizar esta
explicação nos meus treinamento e materiais que estou preparando para os
novatos em Perl.

Solli M. Honório

Em 24 de março de 2010 00:21, Thiago Glauco <thiago em nerdsland.net> escreveu:

> Aiai..
>
> Este é o tipo da coisa que é tão simples que fica difícil explicar...
>
> Quando o Perl foi criado, uma das preocupações do Larry era tornar a
> linguagem parecida com a linguagem humana. Que é influenciada pelo contexto.
> O contexto é algo que deve estar subentendido pelas duas partes do dialogo.
>
>
> Exemplo de contexto: “Chovem canivetes.” ou “Ele me cortou com um
> canivete.”
>
> A palavra canivete varia conforme o contexto. E você sabe disso
> intuitivamente, culturalmente. É impossível chover canivetes. Mas você sabe
> que canivetes são perigosos. Então se alguém disser que choveram canivetes,
> você associa o canivete a uma situação de chuva perigosa, logo muita chuva.
>
> Agora, vamos levar isto para o Perl.
>
> $myVar = 1;
> $myOtherVar = 2;
> $sum = $myVar + $myOtherVar;
>
> Para o Perl $myVar pode significar a string '1' ou o valor numérico inteiro
> '1'. O mesmo vale para $myOtherVar. Apartir do momento que você quer somar
> os valores o Perl para e pensa... Eu não posso somar strings com o operador
> '+'. Logo o programador quer dizer que os valores são numéricos. Isso é
> contexto.
>
> Então, o Perl guarda o valor numérico da soma em $sum.
>
> Seu código continua...
>
> print $sum, "\n";
>
> E o compilador sabe, pelo contexto, que agora você quer tratar $sum como
> uma string de texto, e não mais como um número... O contexto, dentro do Perl
> é como o contexto da linguagem humana. Você deve verificar a situação para
> saber o real significado das coisas. É estranho no começo mas com a
> experiência você percebe que é muito mais prático que se dar ao trabalho de
> explicar ao compilador o que você quer, como no Java, que te obriga a
> converter toda a hora os valores se isto já está implícito.
>
> Chegando agora as listas:
>
> quando você diz ao compilador
>
> $myVar = @myArr
>
> O compilador sabe que não pode colocar o array dentro de um Scalar. Mas o
> compilador também sabe que você não é um idiota. Então ele pensa: "O que
> existe em um array que pode ser guardado dentro de um escalar? Ah, já sei. O
> número de elementos do array".
>
> se você fizer $myVar = "@myArr" o compilador vai entender que você quer
> transformar o conteúdo do array em um string por causa das aspas. Isso é
> contexto. É o que deve estar subentendido na situação.
>
> se você fizer @myArr = $myVar você criou um array de um elemento.
> e ($myVar1, $myVar2) = @myArr então os valores $myArr[0] e $myArr[1] serão
> associados as variáveis dentro dos parenteses...
>
> Espero ter ajudado.
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
>


-- 
"o animal satisfeito dorme". - Guimarães Rosa
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20100324/c076ab85/attachment-0001.html>


More information about the SaoPaulo-pm mailing list