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

Thiago Rondon thiago at aware.com.br
Wed Mar 24 06:13:50 PDT 2010


Sim, apenas sendo chato. :-)

O conceito de 'contexto' escrito pelo Thiago Glauco esta ótimo, ficou 
realmente muito claro !

Mas, lembre-se: Não confuda contexto com gramática !

Internamente no Perl, isto é chamado de "mágica". :-)

Abs!
-Thiago Rondon

Solli Honorio escreveu:
> 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 
> <mailto: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 <mailto:SaoPaulo-pm em pm.org>
>     http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
>
>
>
> -- 
> "o animal satisfeito dorme". - Guimarães Rosa
> ------------------------------------------------------------------------
>
> _______________________________________________
> 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