Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
June 16, 2022 11:26 am GMT

Esse algoritmo vai te ajudar a entender quando utilizar Recurso ou Enum com Elixir.

Seja muito bem vindo, seja muito bem vinda ao FullstackElxpro

Aqui ns discutimos as estratgias e dicas de sua jornada de aprendizado em Elixir. Isso do zero at a sua primeira vaga como desenvolvedor elixir

Eu sou o Gustavo e o tema de hoje : Recursao ou Enum, quando utilizar com Elixir.

Qual a Diferena entre Recurso e Enum?

Enum: Um conjunto de algoritmos para fazer enumerao em colees.

Recurso um mtodo de resoluo de problemas que envolve quebrar um problema em subproblemas menores e menores at chegar a um problema pequeno o suficiente para que ele possa ser resolvido trivialmente. Normalmente a recurso envolve uma funo que chama a si mesma. Embora possa no parecer muito, a recurso nos permite escrever solues elegantes para problemas que, de outra forma, podem ser muito difceis de programar.

Quais os maiores benefcios de usar Recurso?

Todos os meus posts esto sempre relacionados a minha experincia, e como eu utilizo no dia a dia e sempre o meu maior e te explicar e te dar as situaes que eu passei para voc tomar as suas decises no dia a dia. O que eu tenho visto como vantagem com a recurso ter o controle total do seu algoritmo e saber quebr-lo em pequenos passos e etapas (o que no comeo no to simples e te exige muita prtica) mas vamos ter um exemplo tcnico hoje. te possibilita dar bons nomes para variveis, utilizar diversos patterns matchings, chamadas de funes independentes.

O que vale mais? utilizar Recurso ou Enum?

E uma pergunta bem interessante, e o mais interessante a se pensar aqui so 3 pontos:

  1. Performance
  2. Leitura de cdigo
  3. Resoluo de problemas.

Performance

A questo da performance sempre importante em grande escala, processamento de milhares de linhas e onde pode complicar a sua recurso. O que te existe saber mais sobre anlise assinttica. notao big O e saber anlises de algoritmos para melhorar.

Veja o artigo: https://joaoarthurbm.github.io/eda/posts/analise-assintotica

ps: alguns pontos e estrutura de dados em elixir um tpico interessante para abordar mas isso fica para um outro artigo.

A questo do Enum, quando eu fiz comparao de performance ele sempre sai ganhando, porm em algumas estruturas eu tive muito mais controle em recurso e sadas de dados e utilizando tcnicas de railway e voc pode aprender sobre esse tpico no video abaixo:

*vide o video: https://youtu.be/oyoRNxTF7-U
*

Leitura de Cdigo

Acredito que a recurso te possibilita bons nomes de variveis no dia a dia, tem que tomar cuidado pois um deslize, dependendo de como foi criado a recurso pode ser fatal, e dificultando a leitura de cdigo de outros desenvolvedores.

O mesmo vale para o Enum, mas para um desenvolvedor (ou no) Elixir o enum muito mais confortvel.

Resoluo de Problemas

Recurso neste caso sempre foi o meu favorito pois eu tenho controle sobre tcnicas de TDD e no preciso ficar na tentativa e Erro de qual a melhor funo a ser chamada do Enum. Mas essa tem sido a minha experincia, utilizando pair programming foram as melhores solues e outros devs acompanharam muito bem. Porm a leitura para outros devs sem o contexto foi complicada para refatorar ou corrigir bugs

Concluso.

Como desenvolvedor no tenho certo ou errado de utilizar Enum ou Recurso e por muito tempo eu usei mais recursao, pois para mim e mais fcil para quebrar o problema em pequenos pedaos e por facilitar a utilizao de TDD.

S que eu me deparei que pessoas no conseguiram ler meu cdigo ao utilizar recurso.

Um Benchmark se for necessrio e tambm outra pessoa revisando seu cdigo para te dar feedback do que o melhor para o contexto do seu algoritmo.

O que importante lembrar que tipo de baixo dos panos o Enum utiliza recurso e no saber os os utilizar recurso pode colocar em situaes complicadas de tomar deciso.

Por onde comear?

Calculo de Troco

Imagine um cenario onde voce tem 5 reais, e gastou 0.99 centavos, e voce tem que retornar o troco com moedas de:

  • 1 centavo
  • 5 centavos
  • 10 centavos
  • 25 centavos
  • 50 centavos
  • E valor em Dolar

Image description

A funcao get_change(5, 0.99) te possibilita receber os valores e o primeiro calculo e a subtracao. E como estamos falando de Nao inteiros vamos utilizar o float para para aredondar o valor:

Image description

A nossa proxima iteracao e muito simples. Basta converter este valor para String o que esta a esquerda do ponto e o nosso valor em Dolar a direita e onde temos que calcular o troco.

Image description

Agora para calcular os centavos temos que fazer 3 coisas.

Ter certeza que vamos pegar somente duas casas decimais
Converter para String
E criar uma recusao com um valor padrao de um array contando as moedas de troco, subtraindo o valor, pelo valor da maior moeda, e incrementando um contado como o exemplo abaixo:

Image description

E o resultado final sera:

defmodule ChangeCalculator do  # 1c, 5c, 10c, 25c, 50c  def get_change(money, value_spent) do    (money - value_spent)    |> Float.round(2)    |> get_usd    |> get_cents  end  defp get_usd(value) do    value    |> Float.to_string()    |> String.split(".")    |> then(fn [real, cents] ->      real = String.to_integer(real)      {real, cents}    end)  end  defp get_cents({real, cents}) do    cents =      cents      |> String.split_at(2)      |> then(fn {cents, _} -> String.to_integer(cents) end)    convert_cents_to_currency(cents) ++ [real]  end  defp convert_cents_to_currency(cents) do    check_currency(cents, [0, 0, 0, 0, 0])  end  defp check_currency(0, array), do: array  defp check_currency(value, [one_c, five_c, ten_c, t_c, fifty_c]) when value >= 50 do    rest = value - 50    check_currency(rest, [one_c, five_c, ten_c, t_c, fifty_c + 1])  end  defp check_currency(value, [one_c, five_c, ten_c, t_c, fifty_c]) when value >= 25 and value < 50 do    rest = value - 25    check_currency(rest, [one_c, five_c, ten_c, t_c + 1, fifty_c])  end    defp check_currency(value, [one_c, five_c, ten_c, t_c, fifty_c]) when value >= 10 and value < 25 do    rest = value - 10    check_currency(rest, [one_c, five_c, ten_c + 1, t_c, fifty_c])  end  defp check_currency(value, [one_c, five_c, ten_c, t_c, fifty_c]) when value >= 5 and value < 10 do    rest = value - 5    check_currency(rest, [one_c, five_c + 1, ten_c, t_c, fifty_c])  end  defp check_currency(value, [one_c, five_c, ten_c, t_c, fifty_c]) when value >= 1 and value < 5 do    rest = value - 1    check_currency(rest, [one_c + 1, five_c, ten_c, t_c, fifty_c])  endend

Original Link: https://dev.to/postelxpro/esse-algoritmo-vai-te-ajudar-a-entender-quando-utilizar-recursao-ou-enum-com-elixir-2pcf

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To