[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