Ir para o conteúdo

Aula 31 - Variáveis locais e globais

Essa também é uma das aulas mais importantes do curso. Pois dependendo de como você utilizou as funções e procedimentos aprendidos na aula anterior você pode ter se deparado com um “problema”.

Para entender o que são variáveis locais e globais acho mais fácil trabalharmos com um exemplo.

Exemplo#

Primeiro vamos criar um algoritmo com uma variável chamada minha_variavel, atribuir um valor a ela e depois imprimir o valor dela na tela.

algoritmo "passo1"

var
    minha_variavel: inteiro
inicio
    minha_variavel <- 1
    escreval(minha_variavel)
fimalgoritmo

Agora vamos criar um procedimento chamado exibir e internamente vamos criar uma variável variavel_teste, atribuir um valor a ela e depois imprimir o valor dela na tela.

algoritmo "passo2"

var
    minha_variavel: inteiro
inicio
    minha_variavel <- 1
    escreval(minha_variavel)

    procedimento exibir()
        var variavel_teste: inteiro

        inicio
            variavel_teste <- 10
            escreval(variavel_teste)
    fimprocedimento
fimalgoritmo

Observação

Note que ao executar apenas o valor 1 foi exibido na tela. Isso aconteceu porque nós não chamamos o procedimento exibir dentro do nosso algoritmo.

Agora vamos chamar o procedimento exibir dentro do nosso algoritmo.

algoritmo "passo3"

var
    minha_variavel: inteiro
inicio
    minha_variavel <- 1
    escreval(minha_variavel)

    procedimento exibir()
        var variavel_teste: inteiro

        inicio
            variavel_teste <- 10
            escreval(variavel_teste)
    fimprocedimento

    exibir()
fimalgoritmo

Vejamos o que acontece se dentro do procedimento exibir nós tentarmos acessar a variável minha_variavel.

algoritmo "passo4"

var
    minha_variavel: inteiro
inicio
    minha_variavel <- 1
    escreval(minha_variavel)

    procedimento exibir()
        var variavel_teste: inteiro

        inicio
            variavel_teste <- 10
            escreval(variavel_teste)
            escreval(minha_variavel)
    fimprocedimento

    exibir()
fimalgoritmo

Nota

Observe que o valor 1 foi exibido duas vezes na tela. Isso aconteceu porque o procedimento exibir exibiu o valor da variável minha_variavel que foi declarada no algoritmo.

Mas e se agora a gente tentar acessar a variável variavel_teste dentro do algoritmo, mas fora do procedimento exibir?

algoritmo "passo5"

var
    minha_variavel: inteiro
inicio
    minha_variavel <- 1
    escreval(minha_variavel)

    procedimento exibir()
        var variavel_teste: inteiro

        inicio
            variavel_teste <- 10
            escreval(variavel_teste)
            escreval(minha_variavel)
    fimprocedimento

    exibir()
    escreval(variavel_teste)
fimalgoritmo

Aviso

Observe que nesta etapa o programa falhou. Isso aconteceu porque a variável variavel_teste foi declarada dentro do procedimento exibir e não pode ser acessada fora dele.

Isso quer dizer que a variável variavel_teste é uma variável que só pode ser acessada de dentro do local de onde ela foi declarada. E a variável minha_variavel é uma variável global, pois ela pode ser acessada de qualquer lugar do algoritmo.

Então vamos renomear as variáveis para ficar mais fácil de entender.

algoritmo "passo6"

var
    minha_global: inteiro
inicio
    minha_global <- 1
    escreval(minha_global)

    procedimento exibir()
        var variavel_local: inteiro

        inicio
            variavel_local <- 10
            escreval(variavel_local)
            escreval(minha_global)
    fimprocedimento

    exibir()
fimalgoritmo

Agora que já passamos pelo exemplo vamos as devidas definições.

Variáveis globais#

Variáveis globais são variáveis que podem ser acessadas de qualquer lugar do algoritmo. Ou seja, elas podem ser acessadas e alteradas tanto dentro de procedimentos quanto dentro do algoritmo.

Aviso

Você precisa tomar muito cuidado ao usar as variáveis globais ou elas podem te tirar noites de sono!

Variáveis locais#

Variáveis locais são variáveis que só podem ser acessadas de dentro do local de onde elas foram declaradas. Ou seja, elas só podem ser acessadas e alteradas dentro do procedimento ou função onde elas foram declaradas.

Analogia com a vida real#

Vamos fazer uma analogia com a vida real para ficar mais fácil de entender. Imagine que existem coisas que estão na rua e outras que estão dentro da sua casa. As coisas que estão na rua qualquer pessoa pode acessar e mexer, por exemplo, se tiver uma sacola na rua qualquer pessoa pode pegar e mexer; o mesmo que ocorre em variáveis globais.

Já as coisas que estão dentro da sua casa somente as pessoas que estiverem dentro da sua casa é que poderão acessar e mexer, por exemplo, se tiver uma sacola dentro da sua casa somente as pessoas que estiverem dentro da sua casa é que poderão pegar e mexer; o mesmo que ocorre em variáveis locais.

Quando usar variáveis globais e quando usar variáveis locais?#

Agora que você já sabe o que são variáveis globais e variáveis locais, vamos ver quando usar cada uma delas. A resposta é simples, use variáveis globais quando você precisar acessar a mesma variável de dentro de vários procedimentos e use variáveis locais quando você precisar acessar a mesma variável de dentro de apenas um procedimento.

Momento reflexão

Já pensou se você estivesse desenvolvendo uma calculadora em grupo e um colega criasse um procedimento para exibir o resultado na tela, mas por um descuido ele alterou o valor da variável que armazena o resultado? Isso poderia gerar um grande problema.

Sugestão do autor

De modo geral é recomendado que você use variáveis locais, pois evita com que outros trechos do seu código alterem o valor da variável sem que você saiba.

Mas em alguns casos elas podem ser úteis. Por exemplo, declarar uma variável global que só será usada para leitura, como por exemplo, o número máximo de tentativas de um jogo.

Por que usar variáveis locais são tão interessantes?#

Com as variáveis locais podemos criar diferentes funções que usam variáveis com o mesmo nome, mas por estarem em diferentes procedimentos não há conflito entre elas.

Vejamos um exemplo. Vamos criar uma função chamada soma que recebe dois números e retorna a soma deles.

algoritmo "variavel_local"

var
    minha_global: inteiro
inicio
    minha_global <- 1
    escreval(minha_global)

    funcao soma(v1, v2: inteiro): inteiro
        var resultado: inteiro
        inicio
            resultado <- v1 + v2
            retorne resultado
    fimfuncao

    escreval(soma(1, 2))
fimalgoritmo

Agora vamos criar uma função chamada subtracao que recebe dois números e retorna a subtração deles.

algoritmo "variavel_local"

var
    minha_global: inteiro
inicio
    minha_global <- 1
    escreval(minha_global)

    funcao soma(v1, v2: inteiro): inteiro
        var resultado: inteiro
        inicio
            resultado <- v1 + v2
            retorne resultado
    fimfuncao

    funcao subtracao(v1, v2: inteiro): inteiro
        var resultado: inteiro
        inicio
            resultado <- v1 - v2
            retorne resultado
    fimfuncao

    escreval(soma(1, 2))
    escreval(subtracao(1, 2))
fimalgoritmo

Veja que tudo ocorreu bem, pois as variáveis resultado da função soma e resultado da função subtração são independentes uma da outra, pois elas estão em diferentes procedimentos.

algoritmo "variavel_local"

var
    minha_global: inteiro
inicio
    minha_global <- 1
    escreval(minha_global)

    funcao soma(v1, v2: inteiro): inteiro
        var resultado: inteiro
        inicio
            resultado <- v1 + v2
            retorne resultado
    fimfuncao

    funcao subtracao(v1, v2: inteiro): inteiro
        var resultado: inteiro
        inicio
            resultado <- v1 - v2
            retorne resultado
    fimfuncao

    escreval(soma(1, 2))
    escreval(subtracao(1, 2))
fimalgoritmo

Conclusão#

Nesta aula você aprendeu o que são variáveis globais e variáveis locais e como usá-las. Você também viu que podemos criar variáveis locais com o mesmo nome em diferentes procedimentos, mas que elas são independentes uma da outra. Por fim, você viu que é recomendado que utilize variáveis locais, pois evita com que outros trechos do seu código alterem o valor da variável acidentalmente.

Aula em vídeo#

Caso prefira também existe o conteúdo em forma de vídeo