Mobile App Development · Dart/Flutter

04 · Variáveis — Exercícios

Coloque em prática tipos básicos, inferência com var, final/const, interpolação de string, conversões e variáveis nullable.

Exercício

exercicio_01_tipos_basicos.dart

Declara variáveis com os quatro tipos básicos — String, int, double e bool — todas com tipo explícito, e exibe cada uma com interpolação de string.

// Este programa apresenta os tipos primitivos básicos do Dart:
// String (texto), int (inteiro), double (decimal) e bool (verdadeiro/falso).
void main() {
  // String: armazena sequências de caracteres (texto).
  String nome = 'Ana Martins';
  // int: armazena números inteiros (sem parte decimal).
  int idade = 24;
  // double: armazena números com ponto flutuante (com parte decimal).
  double altura = 1.68;
  // bool: armazena apenas dois valores possíveis — true ou false.
  bool estudante = true;

  // Interpolação de String: usa $ para inserir o valor de uma variável dentro do texto.
  print('Nome: $nome');
  print('Idade: $idade');
  print('Altura: $altura');
  print('Estudante: $estudante');
}

Saída esperada

Nome: Ana Martins
Idade: 24
Altura: 1.68
Estudante: true

Como executar

dart run 04-Variaveis/02_Exercicios/codigo_fonte/exercicio_01_tipos_basicos.dart

Exercício

exercicio_02_inferencia_var.dart

Declara quatro variáveis com var e usa runtimeType para mostrar que, mesmo sem tipo explícito, o Dart infere e fixa um tipo para cada uma a partir do valor inicial.

// Demonstração de inferência de tipo com a palavra-chave 'var'.
// Quando usamos 'var', o Dart deduz automaticamente o tipo da variável
// com base no valor atribuído — isso é chamado de inferência de tipo.
void main() {
  // O Dart infere que 'tecnologia' é do tipo String.
  var tecnologia = 'Flutter';
  // O Dart infere que 'anoAtual' é do tipo int.
  var anoAtual = 2026;
  // O Dart infere que 'versaoAplicativo' é do tipo double.
  var versaoAplicativo = 1.5;
  // O Dart infere que 'cursoAtivo' é do tipo bool.
  var cursoAtivo = true;

  // runtimeType revela o tipo real inferido pelo Dart em tempo de execução.
  // A expressão ${variavel.runtimeType} exibe o nome do tipo entre parênteses.
  print('Tecnologia: $tecnologia (${tecnologia.runtimeType})');
  print('Ano atual: $anoAtual (${anoAtual.runtimeType})');
  print(
    'Versao do aplicativo: $versaoAplicativo (${versaoAplicativo.runtimeType})',
  );
  print('Curso ativo: $cursoAtivo (${cursoAtivo.runtimeType})');
}

Saída esperada

Tecnologia: Flutter (String)
Ano atual: 2026 (int)
Versao do aplicativo: 1.5 (double)
Curso ativo: true (bool)

Como executar

dart run 04-Variaveis/02_Exercicios/codigo_fonte/exercicio_02_inferencia_var.dart

Exercício

exercicio_03_final_const.dart

Compara final (valor definido uma vez, mas conhecido apenas em tempo de execução) com const (constante já conhecida em tempo de compilação) em um cadastro simples de aluno e curso.

// Demonstração das palavras-chave 'final' e 'const' em Dart.
// 'final': o valor é definido uma vez e não pode ser alterado depois (imutável em runtime).
// 'const': o valor é uma constante de tempo de compilação (conhecido antes de executar).
void main() {
  // 'final' aceita valores que só serão conhecidos em tempo de execução,
  // mas uma vez atribuído, não pode ser reatribuído.
  final nomeAluno = 'Joao Pereira';
  // 'const' exige que o valor seja uma constante literal conhecida em compile time.
  const nomeCurso = 'Dart e Flutter';
  // Outro exemplo de constante numérica — não muda durante a execução.
  const cargaHoraria = 120;

  // Exibe os dados usando interpolação de String.
  print('Aluno: $nomeAluno');
  print('Curso: $nomeCurso');
  print('Carga horaria: $cargaHoraria horas');
  // Combina múltiplas variáveis em uma única mensagem formatada.
  print('$nomeAluno iniciou o curso $nomeCurso.');
}

Saída esperada

Aluno: Joao Pereira
Curso: Dart e Flutter
Carga horaria: 120 horas
Joao Pereira iniciou o curso Dart e Flutter.

Como executar

dart run 04-Variaveis/02_Exercicios/codigo_fonte/exercicio_03_final_const.dart

Exercício

exercicio_04_interpolacao.dart

Usa interpolação simples com $variavel e interpolação de expressão com ${...} para calcular e formatar o total de um item de compra.

// Demonstração de interpolação de String e expressões embutidas.
// A interpolação permite inserir variáveis e expressões diretamente em Strings
// usando $variavel ou ${expressao} para cálculos mais complexos.
void main() {
  // Variáveis que representam um item de compra.
  String produto = 'Mouse';
  int quantidade = 2;
  double precoUnitario = 89.90;

  // Cálculo do valor total: multiplicação de quantidade pelo preço unitário.
  double total = quantidade * precoUnitario;

  // Interpolação simples com $variavel (sem chaves) para valores únicos.
  print('Produto: $produto');
  print('Quantidade: $quantidade');
  // Interpolação com ${expressao} necessária quando há chamada de método.
  // toStringAsFixed(2) formata o número com exatamente 2 casas decimais.
  // O \$ exibe o cifrão literalmente (barra invertida escapa o caractere especial).
  print('Preco unitario: R\$ ${precoUnitario.toStringAsFixed(2)}');
  print('Total: R\$ ${total.toStringAsFixed(2)}');
}

Saída esperada

Produto: Mouse
Quantidade: 2
Preco unitario: R$ 89.90
Total: R$ 179.80

Como executar

dart run 04-Variaveis/02_Exercicios/codigo_fonte/exercicio_04_interpolacao.dart

Exercício

exercicio_05_conversoes.dart

Converte texto recebido como String para int e double usando int.parse e double.parse, e então realiza cálculos com os valores convertidos.

// Demonstração de conversão de tipos (parsing) em Dart.
// Frequentemente recebemos dados como String (texto) e precisamos convertê-los
// para tipos numéricos antes de realizar cálculos.
void main() {
  // Simulação de valores recebidos como texto (ex.: entrada do usuário ou API).
  String idadeTexto = '25';
  String alturaTexto = '1.75';

  // int.parse() converte uma String para int.
  // Lança FormatException se a String não for um número inteiro válido.
  int idade = int.parse(idadeTexto);
  // double.parse() converte uma String para double.
  // Lança FormatException se a String não for um número decimal válido.
  double altura = double.parse(alturaTexto);

  // Após a conversão, podemos realizar operações matemáticas normalmente.
  // idade + 1 calcula a idade no próximo aniversário.
  print('Idade no proximo ano: ${idade + 1}');
  // toStringAsFixed(2) exibe o double com 2 casas decimais fixas.
  print('Altura formatada: ${altura.toStringAsFixed(2)}');
}

Saída esperada

Idade no proximo ano: 26
Altura formatada: 1.75

Como executar

dart run 04-Variaveis/02_Exercicios/codigo_fonte/exercicio_05_conversoes.dart

Exercício

exercicio_06_nullable.dart

Declara uma variável String? sem valor inicial (o padrão é null) e mostra a diferença antes e depois de receber um valor concreto.

// Demonstração de variáveis nullable (anuláveis) em Dart.
// Por padrão, variáveis em Dart não podem ser null (null safety).
// Para permitir null, adicionamos '?' após o tipo: String? aceita String ou null.
void main() {
  // String? significa que 'apelido' pode ser uma String ou null.
  // Sem atribuição inicial, o valor padrão é null.
  String? apelido;

  // Exibe null porque nenhum valor foi atribuído ainda.
  print('Antes da atribuicao, o apelido era: $apelido');

  // Agora atribuímos um valor concreto à variável nullable.
  apelido = 'Bia';

  // Exibe o valor atribuído: 'Bia'.
  print('Depois da atribuicao, o apelido e: $apelido');
}

Saída esperada

Antes da atribuicao, o apelido era: null
Depois da atribuicao, o apelido e: Bia

Como executar

dart run 04-Variaveis/02_Exercicios/codigo_fonte/exercicio_06_nullable.dart