DEV Community

loading...

List não é array!

Diego Novais
Software engineer, enthusiast of the best technologies for development, speaker and teacher. I am always in search of knowledge.
Updated on ・2 min read

Quando eu vi o código abaixo pela primeira vez, logo pensei que provavelmente list estaria recebendo um array, pode ser que você também tenha pensado assim rsrs...

Alt Text

Em Elixir é diferente, pois nesse caso list na verdade está recebendo uma List.

O que é uma List?

Em poucas palavras, uma List é uma lista ligada (linked list).

Mas para entender melhor vamos precisar relembrar o que é um Array e em seguida falar com mais detalhes sobre List.

Vamos falar um pouco sobre Array:

Um Array é uma coleção de dados de um mesmo tipo.

No array podemos acessar o seu conteúdo por meio do índice. Ou seja, quando precisamos por exemplo acessar diretamente o terceiro elemento de um array, uma das formas de se fazer isso em Ruby seria passar o index 2:

> x = [1, 2, 3, 4]
> x[2]
> 3
Enter fullscreen mode Exit fullscreen mode

Outra característica do array é que conseguimos iterar o array elemento por elemento diretamente. Em Ruby seria assim:

x.each{|elemento| puts elemento}
Enter fullscreen mode Exit fullscreen mode

Agora, falando sobre List (lista ligada) e Elixir...

No Elixir List são listas encadeadas, ou seja, cada elemento está encadeado (ligado) ao próximo elemento através de posições na memória.

Alt List

Em uma List conseguimos acessar diretamente seu primeiro elemento (Head (cabeça)) e o restante dos elementos (Tail (cauda)).

Alt Text

No exemplo acima, para acessar o primeiro elemento usamos a função de kernel do Elixir hd(list)e para acessar o restante (cauda) da lista encadeada usamos a função de kernel do Elixir tl(list).

Também é possível acessar o head e tail de uma list usando pattern matching:

Alt Text

Para percorrer cada elemento de uma listusamos recursividade:

Alt Text

Nós podemos usar várias outras funções de kernel do Elixir para facilitar nosso trabalho com uma list:

  • first(list) que traz o primeiro elemento da lista.
  • last(list) que traz o ultimo elemento
  • insert_at(list, index, value) que permite inserir um elemento na lista em uma determinada posição.
  • E várias outras.

Caso você precise saber mais detalhes sobre List eu sugiro que dê uma olhada na documentação do Elixir que é bastante completa e tem vários exemplos.

Algo interessante que precisamos saber, é que as funções que usamos para se trabalhar com uma List usam recursão em sua implementação.

Conclusão

De fato uma List não é um Array, e tem bastante diferença. Até mesmo na forma como usamos e pensamos sobre.

Discussion (4)

Collapse
eduardoklosowski profile image
Eduardo Klosowski

Essa discussão de arrays não serem listas é intetessante. Em C ou Java os arrays tem tamanho fixo, enquanto em outras linguagens como PHP eles podem crescer conforme seu número de elementos. É interessante saber a diferença para conseguir entender a necessidade das estruturas de dados, e que as vezes se uma uma estrutura no lugar de um array sem perceber, como nesse caso do PHP.

Collapse
dnovais profile image
Diego Novais Author

Sim! Com certeza! Entender e compreender sobre estrutura de dados e algoritmos por mais simples e básico que seja faz total diferença.

Conhecer em detalhes sobre a tecnologia que está usando é apenas um detalhe mas também é importante e facilita bastante o dia a dia.

Collapse
sam_araujo profile image
Sam

Otima discussão uma array != de uma lista. Adorei o post!

Collapse
dnovais profile image
Diego Novais Author

Fico feliz que tenha gostado e tenha feito sentido para você. Obrigadooo!