Use canos (pipes) semper que possível em Elixir!

6758 단어 programacaoelixir
오이, 페소알!

최근 상품vídeo sobre Pipes em Elixir . Como sei que nem todos gostam de ver vídeos(eu estou entre estas pessoas), vou escrever um pouco sobre o que falei lá.

Em primeiro lugar, preciso falar da Falácia do Espantalho. Um site muito bom sobre falácias lógicas é https://yourlogicalfallacyis.com/ . Lá você encontra um texto sobre a falácia do espantalho que diz:

"Ao exagerar, distorcer, ou simplesmente inventar o argumento de alguém, torna-se muito mais fácil apresentar a sua própria posição como sendo razoável."

Por que eu disse isso? Porque quando você entra na página da Elixir School (que eu adoro) sobre o Operador Pipe está escrito "chamadas em funções podem ficar tão incorporadas a outras chamadas de função, tornando-se muito difícil de seguir"e aí eles dão o seguinte exemplo :

foo(bar(baz(new_function(other_function()))))


Bem, mesmo sem pipe dá pra deixar o código acima bem mais legível. 코모? 아심:

valor = other_function()
nome_significativo_1 = new_function(valor)
nome_significativo_2 = baz(nome_significativo_1)
nome_significativo_3 = bar(nome_significativo_2)
foo(nome_significativo_3)


Ou seja, o código acima talvez fique, dependsendo da escolha dos "nomes significativos"das variáveis, até mais legível do que o example com pipe utilizado na Elixir School:

other_function() |> new_function() |> baz() |> bar() |> foo()


우리는 Elixir School을 사용하여 담배를 피울 때 파이프를 정당화할 수 있습니다.

Eu já sou meio chato em usar os pipes tudo numa mesma linha. OK, sei que no iex não tem muita escolha exceto fazer isto (colocar o pipe no fim da linha e pular para a próxima linha):

iex> "Elixir rocks" |> 
String.upcase() |> 
String.split()


Mas não vou escrever sobre o que não gosto e sim sobre o que gosto.
A tradução literal de pipe é cano e usando o operator pipe.

Na figura abaixo você pode ver como os dados fluem de uma função a outra através dos canos(파이프).



Neste example eu mostrei como você pode usar IO.inspect para ver o que acontece após cada ação do pipe.

Enum.take(1..100, 10)
|> IO.inspect(label: "inicial")
|> Enum.map(fn x -> x * 2 end)
|> IO.inspect(label: "Após map")
|> Enum.filter(fn x -> x > 4 end)
|> IO.inspect(label: "Após filter")
|> Enum.sum()
|> IO.inspect(label: "Após sum")


예를 들면 다음과 같습니다. Elixir를 사용할 수 있는 파이프를 사용하십시오. 의견이 있으시다면(어떤 의견, claro), 또는 파이프 데이샤 또는 코디고 메이스 레기벨!

표지 사진 by Kyle Glenn on Unsplash .

좋은 웹페이지 즐겨찾기