1
resposta

[Projeto] Lista de exercícios - Criando a função de depósito e fazendo sua validação

  1. Criando a função de depósito e fazendo sua validação
import 'dart:io';

void main() {
  bool opcaoCorreta = true;
  List<String> listaOperacao = [
    'deposito',
    'retirada',
    'transferencia',
    'pagamento'
  ];
  String? funcaoDaOperacao = '';
  double valorDaOperacao;

  void escolhaOperacao() {
    print('Digite uma operação (${listaOperacao.join(', ')}):');
    funcaoDaOperacao = stdin.readLineSync();
  }

  void operacaoDesejada() {
    print('Digite o valor da operação:');
    double? valor = double.parse(stdin.readLineSync().toString());
    if (valor != null && !valor.isNegative) {
      valorDaOperacao = valor;
      print('Operação escolhida: $funcaoDaOperacao, Valor: R\$$valorDaOperacao');
    } else {
      operacaoDesejada();
    }
  };

  void pagamento() {
    operacaoDesejada();
  };
  void deposito() {
    operacaoDesejada();
  };
  void retirada() {
    operacaoDesejada();
  };
  void transferencia() {
    operacaoDesejada();
  };

  while (opcaoCorreta) {
    escolhaOperacao();

    if (listaOperacao.contains(funcaoDaOperacao)) {
      switch (funcaoDaOperacao) {
        case 'pagamento':
            pagamento();
          opcaoCorreta = false;
          break;
        case 'deposito':
          deposito();
          opcaoCorreta = false;
          break;
        case 'retirada':
          retirada();
          opcaoCorreta = false;
          break;
        case 'transferencia':
          transferencia();
          opcaoCorreta = false;
          break;
      }
    } else {
      print('Operação inválida. Tente novamente.');
    }
  }
}
1 resposta

Oi Charles,

Excelente iniciativa em criar a função de depósito e validar a entrada do usuário! 👍

Percebi que você está repetindo a lógica de leitura e validação do valor da operação em cada função (deposito, retirada, etc).

Uma forma de otimizar seu código seria criar uma função genérica para essa tarefa, que recebe como parâmetro o tipo de operação e retorna o valor validado.

Assim, você evita repetição de código e torna sua aplicação mais organizada.

Outro ponto é que você está usando double.parse(stdin.readLineSync().toString()).

O toString() aqui é redundante, pois stdin.readLineSync() já retorna uma String?.

Você pode usar diretamente double.tryParse(stdin.readLineSync()) que retorna null se a conversão falhar, evitando erros. 🤔

Além disso, você pode usar um do...while para garantir que o usuário digite uma operação válida pelo menos uma vez, em vez de usar um while com uma variável opcaoCorreta.

Aqui está um exemplo de como você pode refatorar seu código:

import 'dart:io';

void main() {
  List<String> listaOperacao = ['deposito', 'retirada', 'transferencia', 'pagamento'];
  String? funcaoDaOperacao;
  double valorDaOperacao = 0.0;

  double? lerValorOperacao() {
    print('Digite o valor da operação:');
    String? input = stdin.readLineSync();
    double? valor = double.tryParse(input ?? '');
    if (valor == null || valor.isNegative) {
      print('Valor inválido. Digite um valor positivo.');
      return null;
    }
    return valor;
  }

  void realizarOperacao(String operacao) {
    double? valor;
    do {
      valor = lerValorOperacao();
    } while (valor == null);
    valorDaOperacao = valor;
    print('Operação escolhida: $operacao, Valor: R\$$valorDaOperacao');
  }

  do {
    print('Digite uma operação (${listaOperacao.join(', ')}):');
    funcaoDaOperacao = stdin.readLineSync();

    if (listaOperacao.contains(funcaoDaOperacao)) {
      switch (funcaoDaOperacao) {
        case 'pagamento':
          realizarOperacao('pagamento');
          break;
        case 'deposito':
          realizarOperacao('deposito');
          break;
        case 'retirada':
          realizarOperacao('retirada');
          break;
        case 'transferencia':
          realizarOperacao('transferencia');
          break;
      }
    } else {
      print('Operação inválida. Tente novamente.');
    }
  } while (!listaOperacao.contains(funcaoDaOperacao));
}

Para saber mais: Documentação oficial sobre tratamento de erros em Dart.

Continue praticando e explorando as funcionalidades do Dart! 💪