1
resposta

[Dúvida] Variáveis globais

Pesquisando um pouco mais, vi muitos desenvolvedores dizendo que usar a palavra-chave global direto no código é uma má prática. Se o global resolve o erro de forma tão rápida, por que ele é considerado perigoso em projetos reais? Não seria muito mais seguro e correto usarmos sempre o return para passar os dados para fora da função, mantendo os escopos isolados? Mas existe algum momento válido para usar o global?

1 resposta

Olá, Luísa! Tudo bem?

Sua dúvida é excelente e toca em um ponto fundamental da arquitetura de software: o encapsulamento. Como você já percebeu, a palavra-chave global parece um "atalho mágico", mas em projetos reais ela costuma ser vista como um sinal de alerta (um code smell).

Por que o global é considerado perigoso?

O grande problema é a previsibilidade. Imagine que você está trabalhando em um projeto com milhares de linhas de código:

  1. Efeito Colateral (Side Effects): Se uma função altera uma variável global, qualquer outra parte do programa que use essa mesma variável pode começar a se comportar de forma estranha sem que você saiba o porquê. É o famoso "consertei aqui e quebrou lá".
  2. Dificuldade em Testes: Para testar uma função que usa global, você precisa configurar todo o "estado do mundo" do seu programa antes. Funções que dependem apenas de seus parâmetros e do return (chamadas de funções puras) são muito mais fáceis de testar e isolar.
  3. Dificuldade de Rastreamento: Em sistemas complexos, fica quase impossível saber qual função alterou o valor da variável por último, dificultando muito o processo de depuração (debug).

O caminho do return (A boa prática)

Você está corretíssima: usar o return é a forma mais segura e profissional. Isso mantém a função como uma "caixa preta": ela recebe algo, processa e devolve um resultado, sem "sujar" o que está do lado de fora.

Quando o uso de global é válido?

Embora seja raro e deva ser evitado, existem cenários específicos onde ele pode aparecer:

  • Configurações Globais Simples: Em scripts pequenos de automação, para definir uma configuração que raramente muda, mas precisa ser acessada por todos.
  • Contadores de Performance: Às vezes usado em scripts de monitoramento rápidos para contar quantas vezes algo aconteceu no sistema todo.
  • Aprendizado e Prototipagem: Entender como o escopo funciona é vital para entender como o Python gerencia a memória.

Comparação Prática

Com global (Frágil e difícil de rastrear):

saldo = 100

def sacar(valor):
    global saldo  # Altera a variável lá fora diretamente
    saldo -= valor 

Com return (Robusto e explícito):

def sacar(saldo_atual, valor):
    return saldo_atual - valor  # Devolve o novo valor sem "quebrar" nada fora

saldo = 100
saldo = sacar(saldo, 20)  # Controle total de quem está alterando o quê

Sua intuição de que o return é mais seguro está 100% alinhada com o que o mercado exige de um profissional de dados. O isolamento de escopo é o que permite que seu código seja escalável e fácil de manter por outras pessoas.

Espero que possa ter lhe ajudado!

Já aconteceu de você tentar alterar uma variável dentro de uma função e o Python dar erro porque você esqueceu de passar ela como parâmetro ou usar o return?