3
respostas

Como descrever as opções para que elas sejam visíveis ao chamador.

Prezados instrutores,

O desafio da data foi bem interessante, mas eu achei que deveria ir além e criei um arquivo procedural com 6 opções de retorno. a função formatar_data(data_bruta, opcao) retorna uma string com a data formatada (se for chamada externamente) ou imprime a string se for executada diretamente, mas aí a data_bruta receberia datetime.now() e a entrada opcao receberia 0, que retorna a data no formato dd/mm/yyyy. O problema é que temos outras 4 opções e o default que é a data completa no formato dd/mm/yyyy hh:mm:ss.s Sou novo no python e gostaria de saber, em python, qual a melhor opção para listar àqueles que desejarem chamar a função formatar_data(parâmetros) o que significa cada opção.

Como resolver esse dilema em Python?

3 respostas

Sempre há diversas maneiras de se chegar no mesmo resultado. Os critérios de "melhor" varia de projeto para projeto, e em geral costuma ser baseado em critérios de performance, tanto de funcionamento quanto de manutenção/implementação que você só verá diferença em projetos que exijam grande processamento, o que não é o caso.

Visto isso, a melhor sugestão é lhe sugerir que veja o curso: Design Patterns Python I: Boas práticas de programação, e o II posteriormente, também os cursos de Algorítmos, que te darão diversos exemplos práticos de tipos e estrutura de códigos, te dando o conhecimento necessário para você poder dizer "o que é melhor" para tal projeto, ou pelo menos uma direção de como chegar nessa resposta.

Agora se você só quer uma luzinha para resolver esse problema, você pode usar dicionário e passar no parâmetro da função a chave que dá acesso ao PATTERN que desenha o tipo de data/hora desejada... Isso já evita de ficar usando um monte de if else

Prezado Thiago Matos , Bom dia!

Minha dúvida está em como resolver em Python. Em Java, por exemplo, eu criaria annotations, algo do tipo @Situação(criada=0, aberta=1, bloqueada=2, ...) só como exemplo, não estou preocupado com a sintaxe correta do Java aqui. Mas com a anotação, seria possível ao desenvolvedor ver rápidamente o significado dos elementos da situação e com isso fazer sua programaçaõ de forma eficiente.

Em Python, que comecei a estudar agora, não tenho noção da melhor forma de passar ao programador os valores possíveis da situação da conta. Por exemplo, em uma regra de negócio, contas abertas podem receber depósito mas não saque. Ao receber o depósito (depósito inicial) a conta fica ativa e é possível sacar. Já contas bloqueadas não podem receber nem depósito (fraude, por exemplo, em compra de produtos com boletos para um suposto anunciante, mas na verdade é um fraudador que irá sacar os depósitos e sumir com o dinheiro sem entregar os produtos vendidos).

Acredito que no decorrer do curso, as formas de criar / exibir os domínios aos programadores possam ser abordados, mas já que eu criei o domínio da situação da conta (status) eu gostaria dessa informação. Alguns outros domínios possíveis: situação do cliente (se inadimplente, o limite da conta deve ser zero, se bom pagador, pode ter o limite aumentado automaticamente), vínculos da conta ( conta isolada, conta de cliente com investimentos, conta de cliente com dívidas, conta de cliente empresário: a reciprocidade da empresa pode ser positiva ou negativa, etc), convêncios da conta (outro domínio, conta para pagamento de salários, conta para recebimento de tributos, etc). Quando a coisa é simples, basta ler o código e entender do que se trata, mas quando temos um sistema OO complexo, temos que conseguir rapidamente identificar os domínios para podermos aplicá-los às regras de negócio que temos que implantar na construção / evolução / manutenção do sistema.

Você poderia me ajudar?

Prezados,

Como não descobri a melhor forma em Python, vou para a forma menos usual: criar um método de classe. Ainda não implantei mas a opção está entre algo como Classe.listar_dominios ou Projetos.listar_domínios, já que alguns domínios vão além da classe. Mas ainda não vizualizei a forma de efetivar isso. Talvez eu crie uma classe só com os domínios, então essa classe teria que ser importada por todas as classes do projeto e o uso dos domínios ficaria disponível em todas as classes.

Fica essa opção, embora eu realmente ainda desconheça a melhor forma de fazer isso em Python.