Neste artigo
- O que é uma variável?
- O que significa o sinal de igual em programação?
- Como criar e usar variáveis em Python, PHP, C e Java?
- O que é uma linguagem fortemente tipada?
- O que é o var do Java?
- Como trocar o valor de duas variáveis?
- O que é uma constante e por que usar?
- Quais são as regras para dar nome a uma variável?
- Aí você pergunta: e se eu usar uma variável que ainda não recebeu valor?
- Quais são os erros mais comuns com variáveis?
- Agora é com você!
Variável é um nome que o programa dá a um lugar da memória onde ele guarda um valor, e esse valor pode ser trocado durante a execução. Constante é um nome para um valor que fica o mesmo do começo ao fim.
Se você já leu o que é algoritmo, sabe que um programa é uma sequência de passos. As variáveis são o que esses passos manipulam. Elas aparecem em todo artigo daqui, das funções aos vetores e matrizes. Este é o artigo para voltar sempre que a base balançar.
Pense em uma caixa com uma etiqueta colada. Na etiqueta está escrito “idade”. Dentro da caixa há um papel com o número 20. Quando você precisa da idade, olha o papel. Quando a idade muda, você joga o papel fora e coloca outro, com 21. A etiqueta continua a mesma. A caixa é a variável, a etiqueta é o nome e o papel é o valor.
O que é uma variável?
Toda variável tem um nome e um valor. Quando o programa cria uma variável, ele reserva um espaço na memória do computador e associa esse espaço ao nome que você escolheu. Desse ponto em diante, você usa o nome, e o computador cuida de achar o lugar. Para entender melhor esse lugar, veja o artigo sobre memória, bits e bytes.
Em algumas linguagens, a variável também tem um tipo declarado, que diz que espécie de valor cabe ali. Em C e em Java, você precisa informar o tipo e o nome antes de usar a variável. Em Python e em PHP, você não escreve o tipo: a variável passa a existir quando recebe o primeiro valor.
O que significa o sinal de igual em programação?
Aqui está a primeira pegadinha. Na matemática, o sinal de igual afirma que os dois lados valem o mesmo. Na programação, ele é uma ordem chamada atribuição: calcule o que está à direita e guarde na variável que está à esquerda.
Por isso a linha idade = idade + 1 faz sentido em um programa, embora pareça absurda em uma equação. O computador lê o valor atual, soma 1 e guarda o resultado na mesma variável. O valor antigo é substituído.

Sacou? A variável guarda um valor de cada vez. Guardou o 21, o 20 deixou de existir.
Como criar e usar variáveis em Python, PHP, C e Java?
O programa abaixo faz o mesmo nas quatro linguagens: cria variáveis, atualiza uma delas, usa uma constante em uma conta, mostra que maiúsculas e minúsculas importam, troca dois valores e faz uma cópia.
Python:
# Variáveis e constantes: guardar, ler, atualizar e trocar valores
TAXA_ENTREGA = 7.5 # constante por convenção: nome em maiúsculas
idade = 20 # cria a variável idade e guarda 20
print("idade:", idade)
idade = idade + 1 # lê 20, soma 1 e guarda 21 no lugar do 20
print("idade depois do aniversário:", idade)
preco = 19.9
quantidade = 3
total = preco * quantidade + TAXA_ENTREGA
print("total do pedido: %.2f" % total)
nome = "Ana"
Nome = "Bia" # maiúscula e minúscula fazem diferença
print("nome e Nome são variáveis diferentes:", nome, Nome)
a = 5
b = 8
print("antes da troca: a = %d, b = %d" % (a, b))
aux = a # guarda o 5 antes que ele seja apagado
a = b
b = aux
print("depois da troca: a = %d, b = %d" % (a, b))
a = b # cópia: a recebe o valor que está em b
b = 100 # mudar b depois não muda a
print("depois da cópia: a = %d, b = %d" % (a, b))
PHP:
<?php
// Variáveis e constantes: guardar, ler, atualizar e trocar valores
const TAXA_ENTREGA = 7.5; // constante: o valor não pode mudar
$idade = 20; // cria a variável $idade e guarda 20
echo "idade: $idade\n";
$idade = $idade + 1; // lê 20, soma 1 e guarda 21 no lugar do 20
echo "idade depois do aniversário: $idade\n";
$preco = 19.9;
$quantidade = 3;
$total = $preco * $quantidade + TAXA_ENTREGA;
printf("total do pedido: %.2f\n", $total);
$nome = "Ana";
$Nome = "Bia"; // maiúscula e minúscula fazem diferença
echo "nome e Nome são variáveis diferentes: $nome $Nome\n";
$a = 5;
$b = 8;
printf("antes da troca: a = %d, b = %d\n", $a, $b);
$aux = $a; // guarda o 5 antes que ele seja apagado
$a = $b;
$b = $aux;
printf("depois da troca: a = %d, b = %d\n", $a, $b);
$a = $b; // cópia: $a recebe o valor que está em $b
$b = 100; // mudar $b depois não muda $a
printf("depois da cópia: a = %d, b = %d\n", $a, $b);
C:
/* Variáveis e constantes: guardar, ler, atualizar e trocar valores */
#include <stdio.h>
#define TAXA_ENTREGA 7.5 /* constante: o valor não pode mudar */
int main(void) {
int idade = 20; /* cria a variável idade, do tipo int, e guarda 20 */
printf("idade: %d\n", idade);
idade = idade + 1; /* lê 20, soma 1 e guarda 21 no lugar do 20 */
printf("idade depois do aniversário: %d\n", idade);
double preco = 19.9;
int quantidade = 3;
double total = preco * quantidade + TAXA_ENTREGA;
printf("total do pedido: %.2f\n", total);
const char *nome = "Ana";
const char *Nome = "Bia"; /* maiúscula e minúscula fazem diferença */
printf("nome e Nome são variáveis diferentes: %s %s\n", nome, Nome);
int a = 5;
int b = 8;
int aux;
printf("antes da troca: a = %d, b = %d\n", a, b);
aux = a; /* guarda o 5 antes que ele seja apagado */
a = b;
b = aux;
printf("depois da troca: a = %d, b = %d\n", a, b);
a = b; /* cópia: a recebe o valor que está em b */
b = 100; /* mudar b depois não muda a */
printf("depois da cópia: a = %d, b = %d\n", a, b);
return 0;
}
Java:
// Variáveis e constantes: guardar, ler, atualizar e trocar valores
public class Main {
static final double TAXA_ENTREGA = 7.5; // constante: o valor não pode mudar
public static void main(String[] args) {
int idade = 20; // cria a variável idade, do tipo int, e guarda 20
System.out.println("idade: " + idade);
idade = idade + 1; // lê 20, soma 1 e guarda 21 no lugar do 20
System.out.println("idade depois do aniversário: " + idade);
double preco = 19.9;
int quantidade = 3;
double total = preco * quantidade + TAXA_ENTREGA;
System.out.printf("total do pedido: %.2f%n", total);
String nome = "Ana";
String Nome = "Bia"; // maiúscula e minúscula fazem diferença
System.out.println("nome e Nome são variáveis diferentes: " + nome + " " + Nome);
int a = 5;
int b = 8;
System.out.printf("antes da troca: a = %d, b = %d%n", a, b);
int aux = a; // guarda o 5 antes que ele seja apagado
a = b;
b = aux;
System.out.printf("depois da troca: a = %d, b = %d%n", a, b);
a = b; // cópia: a recebe o valor que está em b
b = 100; // mudar b depois não muda a
System.out.printf("depois da cópia: a = %d, b = %d%n", a, b);
}
}
Saída:
idade: 20 idade depois do aniversário: 21 total do pedido: 67.20 nome e Nome são variáveis diferentes: Ana Bia antes da troca: a = 5, b = 8 depois da troca: a = 8, b = 5 depois da cópia: a = 5, b = 100
A saída é a mesma. O que muda é a forma de escrever:
- Python: basta escrever o nome, o sinal de igual e o valor.
- PHP: todo nome de variável começa com cifrão ($). Também não é preciso declarar antes.
- C: a variável é declarada com o tipo na frente, como em int idade ou double preco. Só depois da declaração ela pode ser usada.
- Java: como em C, o tipo vem na frente, como em int idade ou String nome. E o programa inteiro fica dentro de uma classe.
Um detalhe do Java: a linha do total usa o formato de número configurado no computador. Rodei o mesmo programa com o Java ajustado para português do Brasil, e ela saiu como 67,20, com vírgula.
Foque no conceito, e não na linguagem! Nas quatro, a ideia é a mesma: um nome, um valor e a atribuição para guardar.
Repare na última parte da saída. Depois de a = b, as duas variáveis guardam 5. Quando b recebe 100, a continua com 5. A atribuição copia o valor. Ela não amarra uma variável à outra.
O que é uma linguagem fortemente tipada?
Volte ao programa e compare as declarações. Em Python e em PHP, o mesmo nome pode receber um número agora e um texto depois. Testei nas duas: guardei 20 em idade, depois guardei o texto “vinte”, e as duas imprimiram vinte, sem reclamar. O manual do PHP chama isso de tipagem dinâmica: o tipo da variável não é escrito, ele é decidido durante a execução.
Em Java, a regra é outra. A documentação da linguagem diz que ela é estaticamente tipada: toda variável precisa ser declarada, com tipo e nome, antes de ser usada. E diz também que ela é fortemente tipada: o tipo limita os valores que a variável pode guardar e as operações que podem ser feitas com eles. Na prática, o tipo fica colado no nome, e quem confere é o compilador, antes de o programa rodar. Repeti o teste em Java, com int idade = 20; e depois idade = “vinte”;:
error: incompatible types: String cannot be converted to int
O programa nem chegou a existir. Essa é a troca que uma linguagem fortemente tipada oferece: você escreve mais na declaração, e o erro de tipo aparece na hora de compilar, e não no meio da execução.
E o C, que também exige o tipo na declaração? Fiz o mesmo teste com o GCC 13. Ele compilou a linha, só com um aviso, e o programa imprimiu um número sem sentido:
warning: assignment to 'int' from 'char *' makes integer from pointer without a cast [-Wint-conversion]
Declarar o tipo, portanto, não basta para a linguagem ser rigorosa com ele. Nesse teste, o Java recusou a mistura, e o C deixou passar com um aviso. Sacou a diferença?
O que é o var do Java?
Escrever o tipo em toda declaração cansa, e muitas vezes ele é óbvio: em String nome = “Ana”, o valor já mostra que é um texto. Por isso, desde o JDK 10, o Java aceita a palavra var no lugar do tipo, em variáveis locais que já nascem com um valor. O compilador olha o valor inicial e deduz o tipo sozinho. O nome desse recurso é inferência de tipo.
public class Main {
public static void main(String[] args) {
var idade = 20; // o compilador deduz int
var preco = 19.9; // deduz double
var nome = "Ana"; // deduz String
idade = idade + 1; // idade continua sendo int
System.out.println(nome + " tem " + idade + " anos e pagou " + preco);
}
}
Saída:
Ana tem 21 anos e pagou 19.9
ATENÇÃO: o var não transforma o Java em Python. O tipo é deduzido uma única vez, na declaração, e continua fixo. A proposta que criou o recurso diz isso com todas as letras: a ideia era escrever menos, mantendo a checagem de tipos feita pelo compilador. Fiz o teste: declarei var idade = 20; e depois tentei idade = “vinte”;. O erro foi o mesmo de antes:
error: incompatible types: String cannot be converted to int
E, como o tipo sai do valor inicial, sem valor inicial não há o que deduzir. A linha var total; não compila:
error: cannot infer type for local variable total (cannot use 'var' on variable without initializer)
O Java não está sozinho nisso. A mesma proposta lista outras linguagens de tipagem estática que já tinham um recurso parecido: o auto do C++, o var do C# e a declaração com := do Go. Em todas elas, o programador escreve menos, e o compilador continua sabendo o tipo de cada variável.
Vale usar sempre? A documentação da Oracle responde com um aviso: o var pode deixar o código mais fácil de ler, quando tira informação repetida, e mais difícil, quando esconde uma informação útil. Em var nome = “Ana”, o tipo está na cara. Em var resultado = calcular(), quem lê precisa ir atrás da função para descobrir o que voltou. Enquanto você está aprendendo, escrever o tipo ajuda a enxergar o que cada variável guarda.
Como trocar o valor de duas variáveis?
Você tem a = 5 e b = 8 e quer inverter. O primeiro impulso é escrever a = b e depois b = a. Não funciona: a primeira linha apaga o 5, e as duas variáveis terminam com 8.
A solução é a mesma de quem troca o conteúdo de dois copos: você precisa de um terceiro copo. Na programação, ele se chama variável auxiliar.

Ver a animação da troca, com e sem variável auxiliar

Essa troca de três linhas volta em algoritmos de ordenação, como o bubble sort. Vale gravar.
O que é uma constante e por que usar?
No programa, a taxa de entrega vale 7,5 e não deve mudar. Em vez de espalhar o número 7.5 pelo código, demos um nome a ele: TAXA_ENTREGA. Isso traz duas vantagens. Quem lê entende o que o número significa. E, se a taxa mudar, você altera uma linha só.
Cada linguagem trata a constante de um jeito:
- PHP: a palavra const (ou a função define) cria uma constante. O nome não leva cifrão, e o valor não pode ser redefinido durante a execução.
- C: a diretiva #define dá um nome a um valor fixo. Outra forma é declarar a variável com a palavra const.
- Java: a palavra final impede que a variável receba outro valor. O costume é declarar a constante com static final e escrever o nome em maiúsculas.
- Python: não existe constante de verdade. Existe uma convenção: nomes escritos em letras maiúsculas indicam valores que não devem ser alterados.
Fiz o teste de tentar mudar a constante nas quatro linguagens. Em PHP, a linha TAXA_ENTREGA = 9.0; nem chega a executar:
Parse error: syntax error, unexpected token "="
Em C, com const double TAXA_ENTREGA = 7.5; seguido de TAXA_ENTREGA = 9.0;, o compilador recusa:
error: assignment of read-only variable 'TAXA_ENTREGA'
Em Java, com static final double TAXA_ENTREGA = 7.5; e depois TAXA_ENTREGA = 9.0;, o compilador também recusa:
error: cannot assign a value to static final variable TAXA_ENTREGA
Em Python, a mesma tentativa passa sem aviso nenhum, e o programa imprime 9.0. ATENÇÃO: em Python, as maiúsculas são um combinado entre programadores. A linguagem não impede a mudança.
A convenção de nomes vale nas três: variáveis em letras minúsculas, constantes em letras maiúsculas. No Java, a constante também vai em maiúsculas, com as palavras separadas por sublinhado.
Quais são as regras para dar nome a uma variável?
| Regra | Python | PHP | C | Java |
|---|---|---|---|---|
| Como começa | letra ou sublinhado | cifrão e depois letra ou sublinhado | letra ou sublinhado | letra, sublinhado ou cifrão |
| Pode ter dígitos | sim, mas não no começo | sim, mas não logo depois do cifrão | sim, mas não no começo | sim, mas não no começo |
| Maiúsculas e minúsculas | são diferentes | são diferentes | são diferentes | são diferentes |
| Nomes proibidos | as 35 palavras reservadas, como class e while | $this não pode receber valor | as palavras reservadas da linguagem | as palavras reservadas, como class e while |
Quando a regra é quebrada, o programa nem começa. Em Python, a linha 2nota = 7 produz:
SyntaxError: invalid decimal literal
E class = 5, que usa uma palavra reservada, produz:
SyntaxError: invalid syntax
Além das regras, existe o bom senso. O computador aceita x1, aaa e coisa. Quem vai ler o código daqui a um mês, e esse alguém é você, agradece por nota_final, total_pedido e taxa_entrega.
Aí você pergunta: e se eu usar uma variável que ainda não recebeu valor?
Depende da linguagem, e aqui as quatro se comportam de formas bem diferentes. Testei a mesma situação: mostrar a variável total sem nunca ter guardado nada nela.
Em Python, o programa para com um erro:
NameError: name 'total' is not defined
Em PHP, o programa continua, a variável vale null e aparece um aviso:
Warning: Undefined variable $total
Em C, declarar int total; reserva o espaço, mas não coloca nada nele. O valor inicial é indefinido: a variável fica com o que já estava naquele pedaço da memória. O compilador, com os avisos ligados, alerta:
warning: 'total' is used uninitialized [-Wuninitialized]
ATENÇÃO: em C, variáveis locais não são inicializadas automaticamente. Dê sempre um valor inicial, como em int total = 0;.
Em Java, o programa nem compila. Com int total; seguido de System.out.println(total);, o compilador para na segunda linha:
error: variable total might not have been initialized
O Java não dá valor inicial às variáveis locais, e também não deixa você ler uma delas antes de guardar algo.
Quais são os erros mais comuns com variáveis?
- Ler o sinal de igual como igualdade. Ele é uma ordem de guardar, e funciona da direita para a esquerda.
- Trocar dois valores sem variável auxiliar. A primeira atribuição apaga um dos valores.
- Errar maiúsculas e minúsculas. total, Total e TOTAL são três nomes diferentes.
- Esquecer o cifrão no PHP ou colocá-lo em uma constante. Variável leva cifrão, constante não.
- Usar a variável antes de dar um valor a ela. Em Python é erro, em PHP é aviso, em C o valor é imprevisível e em Java o programa não compila.
- Esquecer de declarar o tipo em C ou em Java. Sem a declaração, o programa não compila.
- Achar que a cópia mantém ligação. Depois de a = b, mudar b não muda a.
- Achar que o var do Java deixa a variável mudar de tipo. O tipo é deduzido uma vez, na declaração, e não muda.
- Dar nomes que não dizem nada. O programa roda, mas ninguém entende.
Agora é com você!
No papel:
- Acompanhe linha por linha e diga os valores finais: x = 3; y = x; x = x + 2; y = y * x.
- Quais destes nomes são válidos em Python: nota1, 1nota, nota_final, nota-final, while?
- Escreva as três linhas que trocam os valores de p e q usando a variável temp.
No computador:
- Crie as variáveis largura e altura, calcule a área de um retângulo e mostre o resultado nas quatro linguagens.
- Crie a constante DIAS_SEMANA e use-a para calcular quantos dias há em 6 semanas.
- Troque os valores de três variáveis em rodízio: a recebe o de b, b recebe o de c e c recebe o de a. De quantas auxiliares você precisa?
Tente sozinho, sem pedir a resposta pronta para ninguém, nem para a IA!
Até o próximo artigo!
Confiança Sempre!!!
Fontes:
- Manual do PHP, Variáveis: Básico, com o cifrão, a regra de nomes, a diferença entre maiúsculas e minúsculas, a atribuição por valor e o aviso de variável indefinida.
- Manual do PHP, Constantes, com a definição de constante como valor que não muda durante a execução e a convenção de nomes em maiúsculas.
- Manual do PHP, Constantes: Sintaxe, com as diferenças entre constantes e variáveis, entre elas a ausência do cifrão e a proibição de redefinir.
- Documentação do Python, Lexical analysis, com as regras de nomes, a diferença entre maiúsculas e minúsculas e a lista de 35 palavras reservadas (em inglês).
- PEP 8, Style Guide for Python Code, com a convenção de constantes em letras maiúsculas e de variáveis em minúsculas com sublinhado (em inglês).
- University of Waterloo, Python from scratch, Storing and using information in Python, com a observação de que nada em Python impede a alteração de uma constante e a convenção das maiúsculas (em inglês).
- Unicamp, Instituto de Computação, MC102, Declaração de Variáveis, com a variável como nome e valor, a declaração que reserva espaço na memória, o valor inicial indefinido e a atribuição que substitui o valor (PDF, slides de aula).
- Unicamp, Instituto de Computação, MC102, Tipos básicos, com as regras para escolher identificadores em C (PDF).
- Unicamp, Instituto de Computação, MC102, Variáveis, Constantes e Expressões Numéricas, com a declaração de variáveis e o uso de #define para constantes (PDF, slides de aula).
- Universidade Federal de Pernambuco, Centro de Informática, Introdução a Linguagem C, com a declaração por tipo e nome, o comando de atribuição e o aviso de que variáveis locais não são inicializadas automaticamente (PDF, slides de aula).
- USP, ICMC, Declaração de Variáveis, com a convenção de minúsculas para variáveis e maiúsculas para constantes (PDF, slides de aula).
- Universidade Federal do Espírito Santo, seminário sobre PHP, com a ausência de declaração explícita de tipo nas variáveis do PHP (PDF).
- ACM, CS2013, Software Development Fundamentals, com variáveis, expressões e atribuição entre os conceitos fundamentais de programação (em inglês).
- Oracle, The Java Tutorials, Primitive Data Types, com a definição de linguagem estaticamente tipada, o tipo que determina os valores e as operações da variável e o erro de compilação ao ler uma variável local sem valor (em inglês).
- Oracle, The Java Language Specification, Java SE 21, capítulo 4: Types, Values, and Variables, com a definição de linguagem fortemente tipada, em que os tipos limitam os valores que uma variável pode guardar e as operações sobre eles (em inglês).
- Oracle, Java SE 21, Local Variable Type Inference, com o var a partir do JDK 10, o tipo inferido do valor inicial e o aviso de que ele pode melhorar ou piorar a leitura do código (em inglês).
- OpenJDK, JEP 286: Local-Variable Type Inference, com o objetivo de reduzir a escrita mantendo a checagem estática de tipos e a lista de linguagens com recurso parecido, entre elas C++, C# e Go (em inglês).
- Oracle, dev.java, Creating Variables and Naming Them, com a palavra final, que indica um valor que nunca muda, e a convenção de constantes com static final e nome em maiúsculas (em inglês).
- Manual do PHP, Types: Introduction, com o PHP descrito como linguagem de tipagem dinâmica, em que o tipo da variável é determinado durante a execução (em inglês).
- Os exemplos foram executados em Python 3.13, PHP 8.3, GCC 13 e Java 21.

Continue a conversa