1
resposta

[Sugestão] Refatoração do código

Alou!

Na aula 4 do último módulo são criadas funções de boas maneiras. O jeito que o professor criou ficou bem verboso, então fiz a refatoração a seguir:

bool isThisManners() {
    List<String> manners = ['oi', 'olá', 'obrigado', 'obrigada', 'bom', 'boa', 'tarde', 'noite', 'dia', 'de nada'];

    manners.forEach((element) {
      if (question.toLowerCase().contains(element)){
        isThisGoodManners = true;
      }
     });

    return isThisGoodManners;
  }

Foi criada uma lista com os elementos e a lista foi percorrida com um forEach (há um tópico com uma solução igual de outro aluno). No laço, o elemento é jogado em lower case para diminuir a quantidade de itens da lista. Só que tem um pequeno problema... Na classe TimeQuestions há uma parte que verifica se o código possui alguma das palavras que também estão na classe GoodManners, então isso acaba atrapalhando na lógica de resposta do bot. Por exemplo, quando falamos "bom dia", ele diz que não entende e pergunta se queremos saber qual dia é hoje, então refatorei dessa forma a função isThisTime da classe TimeQuestions:

bool isThisTime() {
    //verificar se estamos numa pergunta sobre Tempo
    if (question.toLowerCase().contains('que') && question.toLowerCase().contains('horas')) {
        isThisATimeQuestion = true;
        print('Horas ' + question);
      }
      else if (question.toLowerCase().contains('qual') && question.toLowerCase().contains('dia')){
        isThisATimeQuestion = true;
        print('Dia atual ' + question);
      }
      else if ((question.toLowerCase().contains('qual') && question.toLowerCase().contains('ano')) 
      || (question.toLowerCase().contains('que') && question.toLowerCase().contains('ano'))) {
        isThisATimeQuestion = true;
        print('Ano atual ' + question);
      }

      return isThisATimeQuestion;
  }

Claro que ainda dá para melhorar, mas é só um exemplo.

1 resposta

Olá, Henrique!

Agradeço por compartilhar sua refatoração, é sempre bom ver estudantes buscando otimizar o código e aprendendo com o processo. Sua solução parece bem pensada e eficiente.

A refatoração da função isThisManners() que você fez é interessante, e o uso do método forEach() para percorrer a lista de maneiras é uma prática comum e eficiente. Além disso, a conversão para minúsculas é uma ótima maneira de lidar com a variação de maiúsculas e minúsculas.

Em relação à função isThisTime(), sua refatoração também faz sentido. Você está verificando se a pergunta contém palavras-chave específicas para determinar se é uma pergunta sobre tempo, o que é uma abordagem sólida.

No entanto, é importante lembrar que este é um exemplo simples e, em um chatbot real, a lógica seria muito mais complexa para lidar com uma variedade maior de perguntas e respostas.

Uma sugestão para melhorar ainda mais a sua refatoração seria encapsular a lógica de verificação em uma função separada, para evitar repetições de código. Por exemplo:

bool containsKeywords(String question, List<String> keywords) {
  for (var keyword in keywords) {
    if (!question.toLowerCase().contains(keyword)) {
      return false;
    }
  }
  return true;
}

bool isThisTime() {
  if (containsKeywords(question, ['que', 'horas'])) {
    isThisATimeQuestion = true;
    print('Horas ' + question);
  } else if (containsKeywords(question, ['qual', 'dia'])) {
    isThisATimeQuestion = true;
    print('Dia atual ' + question);
  } else if (containsKeywords(question, ['qual', 'ano']) || containsKeywords(question, ['que', 'ano'])) {
    isThisATimeQuestion = true;
    print('Ano atual ' + question);
  }

  return isThisATimeQuestion;
}

Isso torna o código mais limpo e mais fácil de ler e manter. Mas, novamente, essa é apenas uma sugestão e o mais importante é que você está pensando criticamente sobre como melhorar seu código, o que é uma habilidade valiosa para qualquer desenvolvedor.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software