Também conhecidas como funções internas, as funções built in são recursos muito uteis encontrados na maioria das linguagens de programação.
Nesse capítulo exploraremos algumas que são bastante uteis para diversas situações.
String
Comecemos com algumas bem simples para trabalharmos com string.
String.reverse("Trybe")
# "ebyrT"
String.split("Trybe escola de programação")
# ["Trybe", "escola", "de", "programação"]
String.replace("meen", "e", "o")
# "moon"
String.replace("Vamos usar Javascript", "Javascript", "Elixir")
# "Vamos usar Elixir"
Enum
Agora que já deu pra sentir um gostinho, falaremos do módulo Enum.
O Enum é o módulo que utilizamos no Elixir para trabalhar com dados “enumeráveis”, como Lists, Maps e Ranges.
O Enum.map()
, por exemplo, é muito parecido com o .map
do Python ou do Javascript, o primeiro argumento é uma coleção e o segundo argumento é uma função, que pode ser anônima, que lida com os valores passados e retorna uma nova coleção.
Enum.map([10, 20, 30], fn num -> num * 2 end)
# [20, 40, 60]
O Enum.reduce()
pega uma coleção de elementos e reduz eles a um único resultado, segundo os critérios que passarmos.
Observe o exemplo abaixo:
students = [
%{name: "Paracelso", media_final: 10},
%{name: "Rasputin", media_final: 8},
%{name: "Eliphas Levi", media_final: 9},
]
Enum.reduce(students, 0, fn (%{media_final: media_final}, acc) -> acc + media_final end)
# 27
Uma maneira muito útil de acessarmos uma determinada posição em uma lista é usando Enum.at()
Observe o exemplo:
Enum.at(students, -1)
# %{name: "Eliphas Levi", media_final: 9}
Enum.at(students, 2)
# %{name: "Rasputin", media_final: 8}
É importante ressaltar que estamos utilizando listas nos exemplos, mas também podemos realizar as operações diretamente nos maps.
Enum.map(%{name: "Eliphas Levi", media_final: 9}, fn {_key, value} -> value end)
# ["Eliphas Levi", 9]
Stream
Agora para fechar a seção de funções Built In é importante falarmos sobre Stream!
Muitas vezes precisaremos lidar com uma enorme quantidade de dados e a função Enum armazena seu resultado direto, na memória, o que pode trazer problemas de desempenho.
Com o Stream armazenamos o resultado na memória somente quando ele é implicitamente invocado, ou seja, “Lazy method”.
Observe o exemplo:
Stream.map(students, fn (%{name: name}) -> name end)
#Stream<[
enum: [
%{media_final: 10, name: "Paracelso"},
%{media_final: 8, name: "Rasputin"},
%{media_final: 9, name: "Eliphas Levi"}
],
funs: [#Function<47.58486609/1 in Stream.map/2>]
]>
No exemplo anterior vemos que o map não foi feito ainda e somente sera efetuado quando invocarmos o resultado, assim otimizamos o nosso fluxo:
Stream.map(students, fn (%{name: name}) -> name end) |> Enum.to_list()
# ["Paracelso", "Rasputin", "Eliphas Levi"]
Conclusão
Nesse artigo aplicamos algumas funções Built in uteis para o nosso dia a dia.
O próximo artigo encerra a série “Meus primeiros passos no Elixir” e falarei sobre a Phoenix uma poderosa framework Elixir para desenvolvimento web.
Top comments (0)