Muitas línguas parecem ter estruturas muito semelhantes chamadas iteráveis ou enumeráveis. São estruturas que podem ser iteradas ou enumeradas, que me parecem coisas extremamente semelhantes. Essas palavras são sinônimos ou existe uma diferença semântica sutil entre iterável e enumerável que justifica a escolha do termo?
16
Respostas:
IMHO isso depende do contexto, às vezes eles são sinônimos, às vezes não são. Por exemplo, em C # você tem um tipo de dados "IEnumerable", que classifica iteradores, mas também possui a declaração "enum", que é para constantes simbólicas, não especificamente para iterações. Em outras linguagens de programação (ou outros contextos), a situação pode ser semelhante ou não.
Se você quer dizer as duas palavras como verbos em inglês e não especificamente como palavras-chave da linguagem de programação,
E como a iteração é necessária para enumerar, e enumerar implica algum tipo de iteração, essas duas descrições de processo geralmente podem ser trocadas.
fonte
Como outros já disseram, a semântica precisa depende da linguagem de programação que usa os termos, então darei uma avaliação puramente linguística.
"Iterável" é uma palavra bastante nova, obviamente se referindo a "iteração" e aos "iteradores" que muitas linguagens construíram. Portanto, esses tipos quase certamente suportam um iterador, mas não necessariamente qualquer outra coisa, e não necessariamente algo além a funcionalidade mais básica do iterador: processando cada item uma vez. Reversão, exclusão, medição de distâncias etc. podem ou não ser suportadas.
"Enumerável" refere-se a enumerar coisas, o que pode significar o mesmo que iterar, mas apenas se o idioma ainda não usar "iterável" para esse fim. Se uma linguagem possui ambos, "enumerável" quase certamente significa outra coisa, provavelmente algo mais poderoso. Provavelmente, ele suportará a noção de conectar cada elemento com um índice numérico único e provavelmente permitirá acesso aleatório (por exemplo, recuperação do terceiro elemento antes do primeiro e do segundo).
É sobre todo o significado que você pode deduzir razoavelmente apenas das palavras. Em qualquer situação concreta, consulte os documentos da API da biblioteca padrão.
fonte
Quero me concentrar na definição estrita de ambos os termos
Iterable
é iterar as coisas e obter acesso ao elemento, um por um.Eu acho que o termo
Enumerable
foi originado da máquina de tornear. É sobre a capacidade de listar o elemento um por um em uma ordem adequada. As coisas podem ser listadas uma a umacountable
, cada uma com um índice de correspondência exclusivo. Dado um elemento, você pode obter um índice exclusivo. Dado um índice, você pode encontrar apenas um elemento possível associado a esse índice.Em outras palavras,
Enumerable
implica a capacidade de gerar os elementos. Alguma linguagem de programação, por exemplo,Haskell
implementou essa ideia. Existe uma classe do tipo Enum eChar
é uma da instância.fonte
enumeração está contando, iteração é uma repetição
uma segunda enumeração produzirá o mesmo número, uma iteração pode ser uma variação
fractais são construídos por iterações de uma função, repetindo a função no resultado da última iteração, cada iteração tem um valor diferente
fonte