[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