🌐 Escopo: Variáveis Locais e Globais

O Escopo determina onde uma variável “vive” e quem pode acessá-la. Quando uma variável sai de escopo, o computador libera o espaço de memória que ela ocupava.

🏠 Variáveis Locais

Uma variável local só existe dentro do bloco { ... } onde foi criada (função, se, para). Ao chegar no fechamento da chave, ela é “esquecida”.

graph LR
    subgraph Funcao ["Bloco da Função"]
        V[Variável Local]
    end
    Chamador["Programa Principal"] -.-> X["ERRO: Acesso negado"]
    X -.-> V

Se você declarar uma variável dentro de um se, tentar usá-la fora dele resultará em erro de compilação.


🌍 Variáveis Globais

Variáveis globais são declaradas logo no início, fora de todas as funções. Elas ficam disponíveis para o programa inteiro.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
programa {
    inteiro pontosGlobal = 0 // GLOBAL: visível em todo lugar

    funcao adicionarPonto() {
        pontosGlobal++ // Acessa a global
    }

    funcao inicio() {
        adicionarPonto()
        escreva("Placar: ", pontosGlobal)
    }
}

📥 Passagem por Valor (A Cópia)

Quando passamos um parâmetro por valor, o Portugol cria uma cópia idêntica do dado em um novo endereço de memória da função de destino.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
programa {
    funcao dobrar(inteiro num) { // num recebe uma cópia
        num = num * 2
        escreva("Dentro da função: ", num, "\n")
    }

    funcao inicio() {
        inteiro original = 10
        dobrar(original)
        escreva("Original continua: ", original) // Continua 10
    }
}

📊 Fluxo na Memória

  1. inicio() cria original (Valor: 10).
  2. Chamada dobrar(original) cria uma nova variável num (Valor: 10).
  3. dobrar() altera num para 20.
  4. original permanece intocado.

🏗️ Sintaxe e Resumo

  • Parâmetros: São as variáveis na porta de entrada da função: funcao nome(tipo param).
  • Retorno: É o dado que a função envia de volta ao final: retorne valor.
TipoLocalizaçãoVisibilidadeRecommandação
LocalDentro de funções/blocosRestrita ao blocoSempre use por segurança.
GlobalTopo do programaTodo o programaEvite, pois consome memória e dificulta testes.


🏁 Resumo do Capítulo

O domínio do escopo evita bugs silenciosos e garante que você saiba exatamente onde cada dado está sendo processado. No próximo capítulo, veremos o poder da Passagem por Referência! 🚀