Algoritmos

Variáveis e constantes: o que são e como usar

Capa do artigo Variáveis e constantes: o que são e como usar
Leitura com foco

Entenda o contexto.
Leve para a prática.

Neste artigo
  1. O que é uma variável?
  2. O que significa o sinal de igual em programação?
  3. Como criar e usar variáveis em Python, PHP, C e Java?
  4. O que é uma linguagem fortemente tipada?
  5. O que é o var do Java?
  6. Como trocar o valor de duas variáveis?
  7. O que é uma constante e por que usar?
  8. Quais são as regras para dar nome a uma variável?
  9. Aí você pergunta: e se eu usar uma variável que ainda não recebeu valor?
  10. Quais são os erros mais comuns com variáveis?
  11. 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.

Três passos da linha idade = idade + 1: ler o valor 20 guardado na variável, calcular 20 + 1 e guardar 21 na mesma variável
A atribuição tem direção: primeiro o lado direito é calculado, depois o resultado é guardado no nome do lado esquerdo.

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.

Tabela com os valores de a, b e aux depois de cada linha da troca: aux = a, a = b e b = aux, terminando com a = 8 e b = 5
A variável auxiliar guarda o 5 antes que a linha a = b o apague.
Ver a animação da troca, com e sem variável auxiliar
Animação da troca de valores entre duas variáveis com e sem variável auxiliar
Com a auxiliar, a troca dá certo em três linhas. Sem ela, o 5 se perde.

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?

RegraPythonPHPCJava
Como começaletra ou sublinhadocifrão e depois letra ou sublinhadoletra ou sublinhadoletra, sublinhado ou cifrão
Pode ter dígitossim, mas não no começosim, mas não logo depois do cifrãosim, mas não no começosim, mas não no começo
Maiúsculas e minúsculassão diferentessão diferentessão diferentessão diferentes
Nomes proibidosas 35 palavras reservadas, como class e while$this não pode receber valoras palavras reservadas da linguagemas palavras reservadas, como class e while
Regras de nomes nas quatro linguagens.

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:

Sobre quem escreve

Walmir Silva

Olá! Sou Walmir, engenheiro de software com MBA em Engenharia de Software e o cérebro por trás do GrowthCode e autor do livro "Além do Código".

Se você acha que programação é apenas sobre escrever código, prepare-se para expandir seus horizontes. Aqui, nós vamos além do código e exploramos as interseções fascinantes entre tecnologia, negócios, artes e filosofia.

Você está em busca de crescimento na carreira? Quer se destacar em um mercado competitivo? Almeja uma vida mais rica em conhecimento e realização? Então você chegou ao lugar certo. No GrowthCode, oferecemos insights profundos, estratégias comprovadas e um toque de sabedoria filosófica para catalisar seu crescimento pessoal e profissional.

Ver todos os artigos →

Continue a conversa

Compartilhe sua perspectiva

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Encontre sua próxima resposta

O que você quer aprender?

Preferências de cookies

Os cookies opcionais começam desligados. Você pode mudar a escolha a qualquer momento por esta tela.

NecessáriosSempre ativos

Guardam a sua escolha de cookies e mantêm o site funcionando. Não são usados para publicidade.

Contam visitas e mostram como o site é usado: Google Analytics e Microsoft Clarity, carregados pelo Google Tag Manager. Como esse contêiner também carrega tags de publicidade, as estatísticas só são ativadas junto com Publicidade e marketing.

Exibem anúncios do Google AdSense e medem campanhas e e-mails: pixels da Meta e do TikTok e o Mautic.

Permite que o Google escolha anúncios com base nos seus interesses. Desligado, os anúncios aparecem sem personalização. Depende de Publicidade e marketing.

Também é possível bloquear cookies nas configurações do navegador. Detalhes na Política de privacidade.