Что вы называете IEnumerable‹Foo›?

Иногда я ловлю себя на мысли, какое слово использовать, говоря о IEnumerable<Foo>. Я не думаю, что вижу последовательное наименование при чтении.

IEnumerable<Foo>: это имя типа. Это бесполезно, когда думаешь или используешь в предложении.

Подборка: допустима, но используется не везде. Хотя у нас есть пространство имен System.Collections.

Последовательность: она тоже действительна и, вероятно, определяет ее лучше.

Перечислитель или Итератор: они подчеркивают операцию, редко используются.

Что будет наиболее подходящим? Что вы читаете в своем коде?


person Community    schedule 02.09.2011    source источник
comment
В основном я имею в виду коллекцию :)   -  person Samich    schedule 02.09.2011
comment
Обычно я ссылаюсь на Enumerable of Foo :-) Итак, последовательность.   -  person xanatos    schedule 02.09.2011


Ответы (5)


IEnumerable<Foo> не является итератором/перечислителем — это отдельная концепция для устройства, которое итерирует его.

Коллекция обычно относится к конкретному устройству, позволяющему выполнять такие операции, как добавление/удаление; это не применимо здесь, но термин не является необоснованным.

Лично я склонен использовать "последовательность" в обсуждениях, но я не использую ее для именования вещей в коде - я бы просто использовал вещь, которую представляет последовательность, т.е. "заказы", "уникальные пользователи " и т. д. - или, в случае универсальных методов, "элементы", "значения" и т. д.

person Community    schedule 02.09.2011
comment
См. также Вопрос относительно IEnumerable и IEnumerator. - person Brian; 02.09.2011

Я определенно склоняюсь к последовательности. На мой взгляд, коллекция конечна, и IEnumerable<Foo> вполне может представлять собой последовательность значений, которые создаются на лету, и, таким образом, может представлять бесконечную последовательность ценности.

person Community    schedule 02.09.2011
comment
Последовательность неплоха, но не все последовательности реализуют какую-либо форму IEnumerable. Последовательность многократного использования была бы моим предпочтительным английским описанием; некоторые повторно используемые последовательности не реализуют реализацию IEnumerable, но поскольку большинство последовательностей, которые не реализуют IEnumerable, не могут быть повторно использованы, я думаю, что повторное использование является полезным прилагательным. - person supercat; 02.09.2011

Существует прецедент письменного обращения к нему как к «IEnumerable of Foo». Например, эта страница MSDN ссылается на "IEnumerable из XElement".

Устно я бы сказал «IEnumerable of Foo» или «Enumerable of Foo».

person Community    schedule 02.09.2011

Безусловно, самый ясный и недвусмысленный способ описать переменную, параметр или поле типа «IEnumerable‹Foo›» — это назвать его «IEnumerable‹foo›», «IEnumerable(Of foo)» или «IEnumerable of фу". Будучи программистом VB, я предпочитаю средний синтаксис, тем более что он не использует пунктуацию, которую можно ошибочно принять за HTML-разметку; говоря, последняя форма была бы наиболее естественным произношением (с начальной буквой «I», представляющей свой собственный слог), за исключением случаев, связанных с вложенными дженериками, когда могут потребоваться другие реплики произношения, чтобы указать точную вложенность.

Некоторые классы, реализующие универсальные или неуниверсальные (*) интерфейсы IEnumerable, являются коллекциями, а некоторые — нет. Некоторые из них являются итераторами; некоторые нет. Таким образом, термины «коллекция» и «итератор» на самом деле не подходят, если не известно, что конкретный IEnumerable на самом деле будет коллекцией или итератором. Термин «итератор» имеет дополнительную проблему, общую для термина «последовательность»: не все итераторы или последовательности реализуют IEnumerable; некоторые реализуют IEnumerator, а некоторые реализуют метод GetEnumerator, но не реализуют IEnumerable (например, потому что они хотят разрешить "foreach", но не хотят обещать все варианты поведения, подразумеваемые IEnumerable). Если кто-то хочет избежать жаргона, термин «многократно используемая последовательность» может быть хорошим. Это не совсем однозначно, потому что он может ссылаться на классы, которые имеют метод GetEnumerator, но не реализуют IEnumerable, или, возможно, на объекты IEnumerator, чей метод Reset фактически сбрасывает перечисление, но исключает одноразовые итераторы.

(*) Термин "IEnumerable" в дальнейшем будет относиться к IEnumerable и IEnumerable‹T› взаимозаменяемо. Аналогично "IEnumerator".

person Community    schedule 02.09.2011

Используйте его в предложении (коде).

IEnumerable<Foo> myFoos = GetFoos();
  //internal vocalization: get some Foos, assign them to myFoos

Я подозреваю, что большинство программистов внутренне не озвучивают тип в объявлении/назначении переменной.

public IEnumerable<Foo> ProcessFoos(IEnumerable<Foo> source)
  //internal vocalization: The method requires some foos and returns some foos.

Думаю, я использую «некоторые» как внутреннюю вокализацию. Вероятно, подойдет любое слово во множественном числе. Пакет, кусок, пучок, стая, изобилие и т. Д.

person Community    schedule 02.09.2011