DEV Community

Igor Giamoniano for Trybe

Posted on • Updated on

Funções Built In no Elixir

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.

ready

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"
Enter fullscreen mode Exit fullscreen mode

Enum

couting

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]
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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}
Enter fullscreen mode Exit fullscreen mode

É 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]
Enter fullscreen mode Exit fullscreen mode

borat

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>]
]>
Enter fullscreen mode Exit fullscreen mode

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"]
Enter fullscreen mode Exit fullscreen mode

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.

phoenix

Top comments (0)