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

"Flávio R. Lopes" flavio.lopes at links.inf.br
Tue Mar 23 18:31:35 PDT 2010


Opa!...valeu Thiago.
Agora ficou claro!....acho que já tinha pegado o espírito da 
coisa!....só não soube me explicar!

(Solli, já li seu link viu!....prometo me esforçar mais antes de 
perguntar, mas como vc sabe, sou novato e muitas vezes não vou enxergar 
as explicações/situações/raciocínios  com a clareza que vocês tem, pois 
vcs tem muito mais esperiência que eu!!)

[]s

Thiago Glauco 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
>



More information about the SaoPaulo-pm mailing list