3
respostas

[Projeto] Lista de Exercícios - Validação de tipos de arquivos em um sistema de upload

  1. Validação de tipos de arquivos em um sistema de upload
import 'dart:io';

void main() {
  String? tiposArquivos = '';
  List<String> tiposExtensoes = ['pdf', 'jpg', 'png', 'docx'];

  bool validacaoExtensao(String? tiposArquivos) {
    return tiposArquivos != null && tiposArquivos.isNotEmpty &&
        tiposExtensoes.contains(tiposArquivos);
  }

  void entrada() {
    print('Tipo de arquivo a ser enviado: ${tiposExtensoes.join(', ')}.');
    tiposArquivos = stdin.readLineSync()?.toLowerCase();
  }

  entrada();

  if (validacaoExtensao(tiposArquivos)) {
    print('Arquivo permitido.');
  } else {
    print('Arquivo não suportado. Digite novamente');
    entrada();
    if (validacaoExtensao(tiposArquivos)) {
      print('Arquivo permitido.');
    } else {
      print('Arquivo não suportado. Digite novamente');

    }
  }
}
3 respostas

Oi Charles,

Seu código está quase perfeito 👍!

A lógica de validação da extensão está correta, mas notei que você está chamando a função entrada() repetidamente dentro do bloco else. Isso pode levar a um loop caso o usuário continue inserindo extensões inválidas.

Uma forma mais elegante de lidar com isso seria usar um loop while para solicitar a entrada do usuário até que uma extensão válida seja fornecida.

Veja um exemplo:

import 'dart:io';

void main() {
  String? tiposArquivos;
  List<String> tiposExtensoes = ['pdf', 'jpg', 'png', 'docx'];

  bool validacaoExtensao(String? tiposArquivos) {
    return tiposArquivos != null && tiposArquivos.isNotEmpty &&
        tiposExtensoes.contains(tiposArquivos);
  }

  do {
    print('Tipo de arquivo a ser enviado: ${tiposExtensoes.join(', ')}.');
    tiposArquivos = stdin.readLineSync()?.toLowerCase();
    if (tiposArquivos == null || tiposArquivos.isEmpty || !validacaoExtensao(tiposArquivos)) {
      print('Arquivo não suportado. Digite novamente');
    }
  } while (!validacaoExtensao(tiposArquivos));

  print('Arquivo permitido.');
}

Neste exemplo, o loop do...while garante que a entrada seja solicitada até que uma extensão válida seja inserida.

Isso torna o código mais conciso e evita repetições desnecessárias. 💪

Para saber mais: Documentação oficial do Dart sobre loops.

Continue praticando e explorando as possibilidades da linguagem! 💻

Fiz uma pequena mudança. Percebi algumas coisas que poderia melhorar.

import 'dart:io';

void main() {
  String? tiposArquivos = '';
  List<String> tiposExtensao = ['pdf', 'jpt', 'png', 'docx'];

  bool validacaoExtensao(String? tiposArquivos) {
    return tiposArquivos != null &&
        tiposArquivos.isNotEmpty &&
        tiposExtensao.contains(tiposArquivos);
  }

  void entrada() {
    print('Tipo de arquivo a ser enviado: (${tiposExtensao.join(', ')})');
    tiposArquivos = stdin.readLineSync()?.toLowerCase();
  }

  void validacaoMensagem() {
    validacaoExtensao(tiposArquivos)
        ? print('Arquivo permitido')
        : print('Arquivo não suportado. Digite novamente');
  }

  do {
    entrada();

    validacaoMensagem();

  } while (!validacaoExtensao(tiposArquivos));
}

Oi Charles,

Excelente iniciativa em buscar melhorias no seu código! 👍

A refatoração que você fez deixou o código mais limpo e organizado. 😎

A utilização do do...while para garantir a repetição da entrada até que uma extensão válida seja fornecida é uma ótima prática.

A função validacaoMensagem com o operador ternário também deixou o código mais conciso.

Só uma pequena observação: na lista tiposExtensao, você escreveu 'jpt' em vez de 'jpg'. 🤔

🤓 Para saber mais: Documentação oficial do Dart sobre operadores.

Continue praticando e explorando as possibilidades do Dart!