[Aula 12.1] Anexo
Escopo de variáveis
Escrito por tmferreira em
Outras Linguagens. Data: 12/02/2007
Licença: Alguns direitos reservados. Dar créditos ao autor e linkar este original
Ver tópico original no fórum.
Escopo de variáveis
Se você reparar bem nos exemplos anteriores, existem variáveis declaradas no corpo principal do algoritmo e variáveis declaradas dentro dos procedimentos ou funções.
É muito importante que se tenha atenção a esse ponto, pois pode ser a origem de muitos problemas futuros.
CODE
INICIO
a : inteiro;
a := 10;
ESCREVA(a);
dobro();
ESCREVA(a);
FIM
PROCEDIMENTO dobro()
a : inteiro;
INICIO
a := 50;
ESCREVA(a * 2);
FIM
O algoritmo acima exibirá:
CODE
10
100
10
Você não esperava esse resultado? Se não estiver atento ao escopo de variáveis, o resultado esperado seria:
CODE
10
100
50
Isso não acontece porque a variável
a usada dentro do procedimento
dobro foi uma variável local (com escopo local) e não uma variável global (com visibilidade em todo o algoritmo).
Para ter o resultado “esperado”, precisaríamos fazer o nosso algoritmo de outra forma:
CODE
INICIO
a : inteiro;
a := 10;
ESCREVA(a);
dobro();
ESCREVA(a);
FIM
PROCEDIMENTO dobro()
INICIO
a := 50;
ESCREVA(a * 2);
FIM
Perceba que dessa vez não declaramos a variável
a dentro do procedimento, fazendo com que a variável usada fosse a
global.
Comentários:
jaderubini disse:
Em algumas linguagens, o processo para usarmos as variáveis globais seria o inverso, não?
Por exemplo, se eu estivesse escrevendo o programa acima em PHP e quisesse usar a variável global dentro do procedimento (pra gerar os resultados 10, 100, 50), eu teria que declará-la dentro do procedimento, porém como global. Por exemplo:
echo $a;
dobro();
echo $a;
function dobro() {
global $a;
$a = 50;
echo $a * 2;
}
Isso me retornaria "10, 100 e 50", ao passo que, se eu não declarasse a variável $a dentro da função como global, eu receberia "10, 100 e 10".
tmferreira disse:
Você falou certo: "Em algumas linguagens...".
Em outras, como Javascript, funciona como eu mostrei no exemplo.
O importante é que se atente ao Escopo das Variáveis!!
jaderubini disse:
Eu apenas chamei atenção pra esse detalhe pq eu acho bom daqui em diante a gente já ficar ligado nas particularidades de cada linguagem.
Sugiro que você indique caso algo que seja passado aqui (por se tratar do aspecto geral da programação) não seja aplicável em todas as linguagens, da mesma forma.
tmferreira disse:
Eu apenas chamei atenção pra esse detalhe pq eu acho bom daqui em diante a gente já ficar ligado nas particularidades de cada linguagem.
Sugiro que você indique caso algo que seja passado aqui (por se tratar do aspecto geral da programação) não seja aplicável em todas as linguagens, da mesma forma.
Obrigado pela sugestão!
Na medida do possível vou fazer, mas não conheço quase nada das linguagens sem ser o PHP e Javascript.
Ver o restante dos comentários no fórum (e aproveitar pra comentar também !).