DEV Community

Discussion on: Um errinho em Elixir

Collapse
 
wldomiciano profile image
Wellington Domiciano

Eu entendi que por erro vc quis dizer "decisão errada que não veio de Erlang", mas não dá para concluir isso comparando Enum.at com lists:nth, pois como já podemos ver pelos nomes, são completamente diferentes.

A descrição de Enum.at é:

Finds the element at the given index (zero-based).

"Encontra o elemento no índice fornecido".

Se eu escrevo Enum.at([:a, :b, :c, :d, :e],3) eu não estou dizendo "me dá o terceiro elemento", estou dizendo "me dá o elemento que está no índice 3", e já que índice começa no 0, é esperado que o resultado seja :d.

Já a descrição de lists:nth é:

Returns the Nth element of List.

"Retorna o enésimo elemento da lista".

Se eu escrevo lists:nth(3, [a, b, c, d, e]) estou dizendo que quero o terceiro elemento.


Ou seja, Enum.at faz exatamente o que o nome sugere e a documentação descreve.

Collapse
 
elixir_utfpr profile image
Elixir UTFPR (por Adolfo Neto) • Edited

Eu chamaria apenas de "decisão errada". O fato de ter vindo de Erlang ou não pouco importa.

Erlang não tem um Enum, certo? O mais próximo de Enum, mas que é conceitualmente diferente, é lists.

Não faz diferença no que eu considero "erro" o fato da documentação da função Enum.at descrever exatamente o que ela faz. Não é um bug.

O "erro" (sempre entre aspas) se repete em Elixir no módulo List, nas funções delete_at, pop_at e provavelmente outras.

Nada que me impeça de amar Elixir.

Collapse
 
rhamorim profile image
Roberto Amorim

Acesso a arrays baseado em zero não é erro - é um legado da forma como se indexa em C. É uma consequência da forma como "aritmética de ponteiros" funciona, e que é - pra quem trabalha com C e outras linguagens mais "perto do metal" - a maneira mais "natural" de pensar nesse tipo de indexação.

Em outras palavras: não é um erro, é uma escolha. Pode-se até argumentar que seja uma escolha ruim (ou que seja anacrônica ou contraproducente numa linguagem mais "abstrata"), mas é uma escolha que tem razão de existir e vários argumentos a favor (e contra).

Thread Thread
 
elixir_utfpr profile image
Elixir UTFPR (por Adolfo Neto) • Edited