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.

Você gostou? Comente no fórum!

Comentários:

jaderubini disse:

Me corrija se eu estiver errado...
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:
CODE
$a = 10;
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:

Exatamente isso, Jader!

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:

Ok.
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. wink.gif

tmferreira disse:

QUOTE(jaderubini @ 22/02/2007 - 20:21) [snapback]60742[/snapback]
Ok.
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. wink.gif

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 !).

Mais recentes em Outras Linguagens

Não consigo.
Por 2pac - Não consigo ver as aulas da 4 a 9 aula vai direto da...
Tudo sobre manipulação de strings e caracteres
Por fernando777 - Muito completo...
Criando bibliotecas no c
Por fernando777 - Criando bibliotecas no c - - a criação de bibliotecas...
Operador sizeof no c
Por fernando777 - Operador sizeof - - o operador sizeof mostra quanto...
Estrutura if else - se senÃo e operadores lógicos
Por fernando777 - If else e operadores lógicos no c...

Ver mais Artigos de Outras Linguagens.

Ver e retirar outras dúvidas no fórum Webly.

Alguns Direitos Reservados | RSS | O Fórum

Webly Portal e Fóruns - Internet + Humana | Design by ArthurHenrique.com