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! 💪