Mobile App Development · Dart/Flutter

03 · Funções — Exercícios

Nove exercícios para praticar funções void, com retorno, parâmetros nomeados, valores padrão e arrow function.

Exercício 1

exercicio_01_saudacao.dart

Função void com um parâmetro posicional String, chamada duas vezes com nomes diferentes para mostrar a reutilização do mesmo código.

// Demonstração de função sem retorno (void) com parâmetro posicional.
// 'void' indica que a função não retorna nenhum valor.
// O parâmetro 'nome' recebe um valor quando a função é chamada.

// Função 'saudar': recebe um nome (String) e imprime uma saudação.
void saudar(String nome) {
  // Usa interpolação de String para inserir o parâmetro na mensagem.
  print('Ola, $nome!');
}

void main() {
  // Chama a função com diferentes argumentos — reutilizando o mesmo código.
  saudar('Ana');
  saudar('Dart');
}

Saída esperada

Ola, Ana!
Ola, Dart!

Como executar

dart run 03-Funcoes/02-Exercicios/codigo_fonte/exercicio_01_saudacao.dart

Exercício 2

exercicio_02_soma.dart

Função com retorno int: recebe dois números inteiros, soma e devolve o resultado, que é armazenado em uma variável antes de ser exibido.

// Demonstração de função com retorno de valor (int).
// O tipo antes do nome da função indica o tipo do valor que ela retorna.
// 'return' encerra a função e devolve o valor ao ponto de chamada.

// Função 'somar': recebe dois inteiros e retorna a soma deles.
int somar(int primeiroNumero, int segundoNumero) {
  // A expressão após 'return' é calculada e enviada de volta ao chamador.
  return primeiroNumero + segundoNumero;
}

void main() {
  // O valor retornado por 'somar' é armazenado na variável 'resultado'.
  int resultado = somar(10, 7);
  print('Resultado: $resultado');
}

Saída esperada

Resultado: 17

Como executar

dart run 03-Funcoes/02-Exercicios/codigo_fonte/exercicio_02_soma.dart

Exercício 3

exercicio_03_total_compra.dart

Função com retorno double e múltiplos parâmetros: calcula o total de uma compra (preço × quantidade) e formata o resultado com toStringAsFixed(2) no padrão de moeda.

// Demonstração de função com múltiplos parâmetros e retorno de double.
// A função encapsula um cálculo repetitivo, tornando o código mais legível.

// Calcula o valor total de uma compra: preço unitário × quantidade.
double calcularTotal(double precoUnitario, int quantidade) {
  // Multiplica os dois parâmetros e retorna o resultado como double.
  return precoUnitario * quantidade;
}

void main() {
  // Chama a função com preço 39.90 e quantidade 3 → total = 119.70.
  double total = calcularTotal(39.90, 3);
  // toStringAsFixed(2) formata o resultado com 2 casas decimais.
  print('Total da compra: R\$ ${total.toStringAsFixed(2)}');
}

Saída esperada

Total da compra: R$ 119.70

Como executar

dart run 03-Funcoes/02-Exercicios/codigo_fonte/exercicio_03_total_compra.dart

Exercício 4

exercicio_04_parametros_nomeados.dart

Função com três parâmetros nomeados obrigatórios (required) para exibir um perfil de usuário — a chamada informa cada valor pelo nome do parâmetro, em qualquer ordem.

// Demonstração de parâmetros nomeados em Dart.
// Parâmetros nomeados são definidos entre chaves {} e identificados pelo nome ao chamar.
// 'required' indica que o parâmetro é obrigatório e não tem valor padrão.

// Exibe o perfil de um usuário com três parâmetros nomeados obrigatórios.
void exibirPerfil({
  required String nome, // Parâmetro nomeado obrigatório do tipo String.
  required int idade, // Parâmetro nomeado obrigatório do tipo int.
  required String cidade, // Parâmetro nomeado obrigatório do tipo String.
}) {
  print('Nome: $nome');
  print('Idade: $idade');
  print('Cidade: $cidade');
}

void main() {
  // Ao chamar, os parâmetros nomeados podem ser passados em qualquer ordem.
  // O nome do parâmetro deve ser informado explicitamente: nome: 'Bia'.
  exibirPerfil(nome: 'Bia', idade: 27, cidade: 'Recife');
}

Saída esperada

Nome: Bia
Idade: 27
Cidade: Recife

Como executar

dart run 03-Funcoes/02-Exercicios/codigo_fonte/exercicio_04_parametros_nomeados.dart

Exercício 5

exercicio_05_valores_padrao.dart

Parâmetro nomeado prefixo com valor padrão 'Info', tornando-o opcional, ao lado de um parâmetro texto obrigatório — duas chamadas mostram o comportamento com e sem o prefixo informado.

// Demonstração de parâmetros nomeados com valor padrão.
// Um parâmetro com valor padrão é opcional: se não for informado na chamada,
// o valor padrão é utilizado automaticamente.

// Exibe uma mensagem formatada com prefixo opcional e texto obrigatório.
void exibirMensagem({
  // 'prefixo' tem valor padrão 'Info' — pode ser omitido na chamada.
  String prefixo = 'Info',
  // 'texto' é obrigatório pois usa 'required' sem valor padrão.
  required String texto,
}) {
  // Formata a saída como "[PREFIXO] mensagem".
  print('[$prefixo] $texto');
}

void main() {
  // Chamada sem informar 'prefixo' → usa o valor padrão 'Info'.
  exibirMensagem(texto: 'Curso iniciado');
  // Chamada informando 'prefixo' → substitui o valor padrão por 'Aviso'.
  exibirMensagem(prefixo: 'Aviso', texto: 'Resolva os exercicios');
}

Saída esperada

[Info] Curso iniciado
[Aviso] Resolva os exercicios

Como executar

dart run 03-Funcoes/02-Exercicios/codigo_fonte/exercicio_05_valores_padrao.dart

Exercício 6

exercicio_06_arrow_function.dart

Duas arrow functions (=>) — uma que dobra um número e outra que verifica se ele é par — mostrando a forma curta de escrever funções de uma única expressão.

// Demonstração de arrow functions (funções de seta) em Dart.
// A sintaxe => (fat arrow) é uma forma compacta de escrever funções com apenas
// uma expressão: o resultado da expressão é automaticamente retornado.
// Equivalente a: int dobrar(int numero) { return numero * 2; }

// Retorna o dobro de um número inteiro.
int dobrar(int numero) => numero * 2;

// Retorna true se o número for par (resto da divisão por 2 igual a zero).
bool ehPar(int numero) => numero % 2 == 0;

void main() {
  int numero = 8;
  // Chama a arrow function 'dobrar' → 8 * 2 = 16.
  print('Dobro: ${dobrar(numero)}');
  // Chama a arrow function 'ehPar' → 8 % 2 == 0 → true.
  print('E par: ${ehPar(numero)}');
}

Saída esperada

Dobro: 16
E par: true

Como executar

dart run 03-Funcoes/02-Exercicios/codigo_fonte/exercicio_06_arrow_function.dart

Exercício 7 · extra

funcaocomparemetro.dart

Material de reforço (versão mais simples, anterior à sequência numerada): a mesma ideia de função com parâmetros posicionais, chamada três vezes com argumentos diferentes — inclusive um negativo — para reforçar a reutilização.

// Exercício: criar uma função com dois parâmetros e reutilizá-la com diferentes valores.
// Demonstra como parâmetros posicionais permitem passar dados distintos em cada chamada.

// Soma dois inteiros e retorna o resultado.
int somar(int a, int b) {
  return a + b;
}

// Chama a mesma função três vezes com argumentos diferentes para mostrar reutilização.
void main() {
  print('Resultado 1: ${somar(5, 3)}');
  print('Resultado 2: ${somar(10, -2)}');
  print('Resultado 3: ${somar(2, 8)}');
}

Saída esperada

Resultado 1: 8
Resultado 2: 8
Resultado 3: 10

Como executar

dart run 03-Funcoes/02-Exercicios/codigo_fonte/funcaocomparemetro.dart

Exercício 8 · extra

funcaosemparametro.dart

Material de reforço: função sem nenhum parâmetro que sempre retorna a mesma String fixa — útil quando o comportamento não varia entre chamadas.

// Exercício: criar uma função sem parâmetros que retorna uma String fixa.
// Funções sem parâmetros são úteis quando o comportamento não varia a cada chamada.

// Retorna sempre a mesma mensagem de boas-vindas.
String obterMensagemBoasVindas() {
  return 'Bem-vindo(a) ao estudo de funcoes em Dart!';
}

void main() {
  print(obterMensagemBoasVindas());
}

Saída esperada

Bem-vindo(a) ao estudo de funcoes em Dart!

Como executar

dart run 03-Funcoes/02-Exercicios/codigo_fonte/funcaosemparametro.dart

Exercício 9 · extra

funcoescalculos.dart

Material de reforço: função que aplica um desconto percentual sobre um preço, encapsulando a fórmula (preço − preço × percentual / 100) para reutilização.

// Exercício: aplicar desconto percentual sobre um preço usando uma função.
// Encapsular a fórmula em uma função facilita reutilização e testes isolados.

// Calcula o preço com desconto: preço - (preço × percentual / 100).
double aplicarDesconto(double preco, double percentual) {
  return preco - (preco * percentual / 100);
}

void main() {
  // Preço original antes de qualquer desconto.
  final double precoOriginal = 40.0;
  // Aplica 10% de desconto: 40.0 - 4.0 = 36.0.
  final double precoComDesconto = aplicarDesconto(precoOriginal, 10);
  print('Preco original: R\$ ${precoOriginal.toStringAsFixed(2)}');
  print('Preco com 10%: R\$ ${precoComDesconto.toStringAsFixed(2)}');
}

Saída esperada

Preco original: R$ 40.00
Preco com 10%: R$ 36.00

Como executar

dart run 03-Funcoes/02-Exercicios/codigo_fonte/funcoescalculos.dart