Именование типов перечислений - PullRequest
5 голосов
/ 15 мая 2009

Если у вас есть набор связанных слов (например, строка и столбец или вкл. И выкл.), Как вы находите собирательное слово, которое описывает эти слова? В частности, как вы называете enum?

Если у меня есть «Red», «Green» и «Blue», разумное имя enum может быть «Color». Значения «On» и «Off» могут иметь разумное имя enum «Power». Но как я могу назвать enum, который может иметь значение «Row» или «Column»?


Пара хороших ответов на вопрос "Что вы называете перечислением Row или Column?" - декартово-индексный тип.

А как насчет поиска общих слов в целом - есть ли какие-то ресурсы или вам просто нужно хорошо разбираться в английском / знать много слов?

Ответы [ 9 ]

9 голосов
/ 15 мая 2009

Попробуйте использовать имя, которое указывает, для чего используется enum, например,

public enum CountMethod 
{
    Row,
    Column
}
6 голосов
/ 15 мая 2009

Существует программное обеспечение под названием WordNet, которое по существу классифицирует каждое английское слово в сложной иерархии классов и имеет встроенное программное обеспечение, которое может принимать два слова и возвращать их самый ранний общий суперкласс (гиперный в языке wordnet).

В этом случае запрос слова red вернет что-то вроде

red, redness
   => chromatic color, chromatic colour, spectral color, spectral colour
       => color, colour, coloring, colouring
           => visual property
               => property
                   => attribute
                       => abstraction, abstract entity
                           => entity

Запрос на синий дает

blue, blueness
   => chromatic color, chromatic colour, spectral color, spectral colour
       => color, colour, coloring, colouring
           => visual property
               => property
                   => attribute
                       => abstraction, abstract entity
                           => entity

Итак, вы знаете, самый точный способ описать красный или синий - это "хроматический цвет"

3 голосов
/ 15 мая 2009

Для (Row | Colum) я обычно использую IndexType или что-то в этом роде. Как я вижу, строка или столбцы представляют собой два разных индекса в одной структуре данных.

Я обнаружил, что использую его в первую очередь, когда пишу структуру данных на основе таблиц. Это позволяет вам писать большую часть кода в целом, независимо от того, работаете ли вы над строками или столбцами, просто с диапазоном индексов структура данных. Затем, чтобы выполнить операцию, специфичную для строки или столбца, вы просто вызываете универсальную операцию с конкретным типом индекса для использования.

Лучше всего, если он ограничен классом, поэтому

Table.IndexType or Grid.IndexType (etc.)
2 голосов
/ 15 мая 2009

Хорошее знание английского словаря было бы полезно для этого, но существует множество коллективных существительных в языке, о которых даже большинство носителей языка совершенно не знают. Например, сколько людей знают, что собирательное существительное для ворон - это «убийство»? Стинг использовал это слово в своей песне "All This Time ...", кстати.

Я предложил Декартово изначально из-за аналога декартовых координат в математике. Вспомогательный вопрос, а как насчет коллективных слов, сам по себе интересен, так что в интересах любого, кто захочет расширить его, из Википедии:

Собирательные существительные от A-H

Собирательные существительные от I-Z

Может быть, есть что-то, что могло бы вызвать хорошее имя enum!

2 голосов
/ 15 мая 2009

Первое, что приходит мне в голову, это «декартово». Как в

public enum Cartesian
{
   Row, Column
}

Причина этого заключается в том, что строка / столбец наиболее точно указывает на декартовы координаты системы координат.

1 голос
/ 15 мая 2009

Я пытаюсь придумать имя, которое имеет смысл при использовании enum. В зависимости от контекста это может быть что-то вроде:

Table.ROW

Или что-то совсем другое, например:

SortMode.ROW
1 голос
/ 15 мая 2009

Другая возможность:

public enum Mapping
{
   Row, Column
}
1 голос
/ 15 мая 2009

Подумайте, как это будет использоваться. Какие свойства или свойства вы хотите описать?

Термин, на котором вы соглашаетесь, должен отражать фактическое использование значений. Это должно быть естественно и несколько угадано для пользователей API.

Например, это, вероятно, довольно хорошо:

widget.IndexMethod = IndexMethod.Row
widget.CountBy = CountMethod.Column

В том же духе, я думаю, Cartesian был бы ужасным выбором в большинстве случаев. Декартово не является ни естественным, ни предполагаемым, если только вы не имеете дело с технической функцией построения графики или чем-то еще.

1 голос
/ 15 мая 2009

Вы хотите имя, которое описывает, каковы отдельные элементы в перечислении. Например, ваш пример Row, Column или оба декартовых элемента, поэтому Cartesian будет хорошим названием для этого. Если у вас есть список частей для магазина оборудования в виде enum, хорошее название для него - HardwareStoreParts и т. Д. Если у вас есть список таких вещей, как shoes, graphs, elephants, blue, pluto, Martha Stewart, значит, вы делаете что-то не так. Если вы не можете придумать термин для предметов, возможно, вы пытаетесь заставить перечисление соответствовать тому, для чего он не предназначен.

...