Recentemente, refletindo sobre como dar o nome para objetos/classes, parei para examinar os nomes dados aos objetos no framework .NET. Um nome que sempre achei estranho era IEnumerable. Por que IEnumerable? Por que não IIterable ou coisas do tipo, já que essa interface permite que, para quem a implementa, expor um enumerador que suporta uma iteração simples sobre uma coleção não gerérica, conforme a definição na MSDN:

Exposes an enumerator, which supports a simple iteration over a non-generic collection.

Após ler a referência da MSDN, tentei entender o que realmente significa enumerar, ou o que é alguma coisa enumerável. Então tudo ficou claro e percebi o quão brilhante e científico foi a escolha do nome IEnumerable.

O que é algo enumerável

Alguma coisa enumerável significa alguma coisa que se possa contar. Suponha que essa coisa seja um conjunto. Um conjunto enumerável é um conjunto com infinitos elementos, porém contável. A estes conjuntos é dados o nome de conjuntos infinitos contáveis, e essa é uma definição matemática.

Em poucas e simples (e também superficiais) palavras, toda vez que dizemos que um conjunto (ou uma coleção) é enumerável, significa que é possível contar seus elementos um-a-um, mesmo que esta coleção tenha um tamanho infinito. Parece estanho contar infinitamente, mas é matematicamente provável, pergunta para o Georg Cantor.

Se um conjunto é enumerável, ele é contável, mesmo que seja infinito.

Para deixar as coisas mais claras, suponha que você foi encarregado de criar uma classe que representa uma coleção ou um cojunto de objetos, e esta coleção é ilimita (estamos despresando o tamanho da sua memória RAM aqui). Essa classe que você irá criar deve permitir contar cada elemento presenta na coleção, porque para iterarmos sobre os elementos é necessário contarmos cada um deles e sabermos em que posição cada um está.

Considerando as definições matématicas, a forma mais sensata e simples é criar uma classe que represente conjuntos infinitos contáveis, e considerando também o que já foi dito anteriormente, todo conjunto infinito contável também é chamado de enumerável. Eis a grande sacada do nome IEnumerable.

NOTA: não encontrei em nenhum lugar a real explicação para o nome IEnumerable, mas após ler sobre conjuntos enumeráveis, fiz, quase que imediatamente, a ligação com o nome da interface utilizada no framework .NET.