Нумерованный тип - Enumerated type

В компьютерное программирование, перечислимый тип (также называемый перечисление, перечислить, или же фактор в Язык программирования R, а категориальная переменная в статистике) является тип данных состоящий из набора именованных значения называется элементы, члены, перечислимый, или же счетчики типа. Имена перечислителей обычно идентификаторы которые ведут себя как константы на языке. Перечислимый тип можно рассматривать как вырожденный помеченный союз из тип единицы. А Переменная это было объявлен как имеющий перечислимый тип, может быть назначен любой из перечислителей в качестве значения. Другими словами, перечислимый тип имеет значения, которые отличаются друг от друга, которые можно сравнивать и назначать, но программист не указывает, что они имеют какое-либо конкретное конкретное представление в памяти компьютера; компиляторы и интерпретаторы могут представлять их произвольно.

Например, четыре костюмы в колоде игральных карт может быть четыре счетчика по имени Клуб, Алмаз, Сердце, и Лопата, принадлежащий к перечислимому типу с именем подходить. Если переменная V объявлен имеющим подходить в качестве типа данных ему можно присвоить любое из этих четырех значений.

Хотя перечислители обычно разные, в некоторых языках один и тот же перечислитель может быть указан дважды в объявлении типа. Имена счетчиков не обязательно должны быть семантически полными или совместимыми в любом смысле. Например, перечислимый тип с именем цвет может быть определен как состоящий из счетчиков красный, Зеленый, Зебра, Отсутствующий, и Бекон. В некоторых языках объявление перечислимого типа также намеренно определяет заказ его членов; в других счетчики неупорядочены; в других случаях неявное упорядочивание возникает из-за того, что компилятор конкретно представляет счетчики как целые числа.

Некоторые типы перечислителей могут быть встроенный в язык. В Логический тип, например, часто является заранее определенным перечислением значений Ложь и Истинный. Многие языки позволяют пользователям определять новые перечислимые типы.

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

Обоснование

Некоторые ранние языки программирования изначально не имели перечислимых типов. Если программисту нужна переменная, например myColor, чтобы иметь значение red, переменная red должна быть объявлена ​​и ей присвоено некоторое произвольное значение, обычно целочисленная константа. Затем переменная red будет присвоена myColor. Другие методы присваивают произвольные значения строкам, содержащим имена счетчиков.

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

С другой стороны, перечисленные типы делают код более самодокументируемым. В зависимости от языка компилятор может автоматически назначать счетчикам значения по умолчанию, скрывая ненужные детали от программиста. Эти значения могут быть даже не видны программисту (см. скрытие информации ). Перечислимые типы также могут помешать программисту писать нелогичный код, такой как выполнение математических операций над значениями перечислителей. Если значение переменной, которой был назначен перечислитель, должно было быть напечатано, некоторые языки программирования могли также печатать имя перечислителя, а не его базовое числовое значение. Еще одним преимуществом является то, что перечисляемые типы могут позволить компиляторам обеспечивать семантическую корректность. Например:myColor = ТРЕУГОЛЬНИК можно запретить, пока myColor = КРАСНЫЙпринято, даже если ТРЕУГОЛЬНИК и КРАСНЫЙ оба внутри представлены как 1.

Концептуально перечислимый тип похож на список номиналы (числовые коды), поскольку каждому возможному значению типа присваивается отличительное натуральное число. Таким образом, данный перечислимый тип является конкретной реализацией этого понятия. Когда порядок имеет значение и / или используется для сравнения, то перечисляемый тип становится порядковый тип.

Конвенции

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

Синтаксис на нескольких языках программирования

Паскаль и синтаксически похожие языки

Паскаль

В Паскаль, перечислимый тип может быть неявно объявлен путем перечисления значений в списке в скобках:

  вар    подходить: (клубы, бриллианты, сердца, лопаты);

Объявление часто появляется в объявлении синонима типа, так что его можно использовать для нескольких переменных:

  тип    костюм = (клубы, бриллианты, сердца, лопаты);    карта = записывать             подходить: костюм;             ценить: 1 .. 13;           конец;  вар    рука: множество [ 1 .. 13 ] из карта;    козырный: костюм;

Порядок, в котором указаны значения перечисления, имеет значение. Перечислимый тип - это порядковый тип, а тип пред и succ функции дадут предыдущее или следующее значение перечисления, а ord может преобразовывать значения перечисления в их целочисленное представление. Однако стандартный Паскаль не предлагает преобразования арифметических типов в перечисления. Extended Pascal предлагает эту функциональность через расширенный succ функция. Некоторые другие диалекты Паскаля позволяют это через приведение типов. Некоторые современные потомки Паскаля, такие как Модула-3, укажите специальный синтаксис преобразования, используя метод, называемый ВАЛ; Модула-3 также лечит BOOLEAN и СИМВОЛ как специальные предопределенные перечислимые типы и использует ЗАКАЗАТЬ и ВАЛ для стандартных ASCII декодирование и кодирование.

Языки стиля Pascal также позволяют использовать перечисление в качестве индекса массива:

  вар    костюм: множество [костюм] из целое число;

Ада

В Ада, использование "=" было заменено на "is", оставив определение очень похожим:

тип Кард-костюм является (клубы, бриллианты, сердца, лопаты);

В добавление к Пред, Succ, Вал и Поз Ада также поддерживает простые преобразования строк через Изображение и Ценить.

Подобно языкам C-стиля, Ada позволяет указывать внутреннее представление перечисления:

 за Кард-костюм использовать   (клубы => 1, бриллианты => 2, сердца => 4, лопаты => 8);

В отличие от языков C-стиля, Ada также позволяет указывать количество бит перечисления:

за Кард-костюм'Размер использовать 4;  - 4 бита

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

   Перемешать : постоянный множество(Кард-костюм) из Кард-костюм :=     (Клубы => Кардсьют'Succ(Клубы), - см. атрибуты перечислений First, Last, Succ, Pred      Бриллианты => Сердца, - явное значение      Сердца => Кард-костюм'Последний, - первое значение перечисления типа Cardsuit, например, трефы      Лопаты => Кард-костюм'Первый - последнее значение перечисления типа Карточный костюм, например, пики      );

Нравиться Модула-3 Ада лечит Булево и Характер как специальный предопределенный (в пакете "Стандарт") перечислимые типы. В отличие от Modula-3 можно также определять собственные типы символов:

тип Открытки является ('7', '8', '9', 'J', 'Q', 'K', 'А');

C и синтаксически похожие языки

C

Оригинал K&R диалект языка программирования C не имеют перечислимых типов.[1] В C перечисления создаются явными определениями ( перечислить само по себе ключевое слово не вызывает выделения памяти), которые используют перечислить ключевое слово и напоминают структура и союз определения:

перечислить костюм {   Клубы,   Бриллианты,   Сердца,   Лопаты};структура карта {   перечислить костюм подходить;   короткая int ценить;} рука[13];перечислить костюм козырный;

C предоставляет целочисленное представление значений перечисления непосредственно программисту. Целые числа и значения перечисления можно свободно смешивать, и все арифметические операции над значениями перечисления разрешены. Переменная enum даже может содержать целое число, которое не представляет ни одно из значений перечисления. Фактически, согласно определению языка, приведенный выше код будет определять Клубы, Бриллианты, Сердца, и Лопаты как константы типа int, который будет преобразован (незаметно) в enum carduit если они хранятся в переменной этого типа.

C также позволяет программисту явно выбирать значения констант перечисления, даже без типа. Например,

перечислить костюм {    Клубы    = 1,    Бриллианты = 2,    Сердца   = 4,    Лопаты   = 8};

может использоваться для определения типа, который позволяет математическим наборам костюмов быть представленными как enum carduit поразрядными логическими операциями.

C #

Нумерованные типы в C # язык программирования сохраняет большую часть семантики "малых целых чисел" перечислений C. Некоторые арифметические операции не определены для перечислений, но значение перечисления может быть явно преобразовано в целое число и обратно, а переменная перечисления может иметь значения, которые не были объявлены определением перечисления. Например, учитывая

перечислить Кард-костюм { Клубы, Бриллианты, Лопаты, Сердца };

выражения CardSuit.Diamonds + 1 и CardSuit.Hearts - CardSuit.Clubs разрешены напрямую (потому что может иметь смысл пройти через последовательность значений или спросить, сколько шагов между двумя значениями), но CardSuit.Hearts * CardSuit.Spades считается менее понятным и разрешается только в том случае, если значения сначала преобразуются в целые числа.

C # также предоставляет C-подобную функцию, позволяющую определять конкретные целочисленные значения для перечислений. Таким образом можно выполнять двоичные операции с перечислениями, таким образом обрабатывая значения перечисления как наборы флагов. Эти флаги можно проверить с помощью бинарных операций или с помощью встроенного метода HasFlag типа Enum.

Определение перечисления определяет имена для выбранных целочисленных значений и является синтаксический сахар, так как можно присвоить переменной перечисления другие целочисленные значения, которые не входят в область определения перечисления.[2][3][4]

C ++

C ++ имеет типы перечисления, которые напрямую наследуются от языков C и работают в основном так же, за исключением того, что перечисление является реальным типом в C ++, что дает дополнительную проверку во время компиляции. Также (как и в случае со структурами) C ++ перечислить ключевое слово автоматически комбинируется с typedef, так что вместо наименования типа имя перечисленияпросто назовите это имя. Это можно смоделировать на C с помощью typedef: typedef перечислить {Значение1, Значение2} имя;

C ++ 11 предоставляет второй тип-безопасный тип перечисления, неявно преобразованный в целочисленный тип. Это позволяет определить потоковую передачу io для этого типа. Кроме того, перечисления не протекают, поэтому их нужно использовать с Enumeration. Тип :: перечисление. Это указывается фразой «enum class». Например:

перечислить учебный класс Цвет {красный, Зеленый, Синий};

В базовый тип - это определяемый реализацией интегральный тип, который достаточно велик, чтобы содержать все перечисленные значения (он не обязательно должен быть наименьшим возможным типом!). В C ++ вы можете напрямую указать базовый тип. Это позволяет «вперед декларировать» перечисления:

перечислить учебный класс Цвет : длинный {красный, Зеленый, Синий};  // должен соответствовать по размеру и разметке памяти типа longперечислить учебный класс Формы : char;  // предварительное объявление. Если позже будут определены значения, которые не помещаются в char, это будет ошибкой.

Идти

Идти использует йота ключевое слово для создания нумерованных констант.[5]

тип ByteSize float64const (    _           = йота // игнорируем первое значение, присвоив пустой идентификатор    КБ ByteSize = 1 << (10 * йота)    МБ    ГБ)

Ява

J2SE версии 5.0 Язык программирования Java добавлены перечисляемые типы, синтаксис объявления которых аналогичен синтаксису объявления C:

  перечислить Кард-костюм { КЛУБЫ, АЛМАЗЫ, ЛОПАТЫ, СЕРДЦА };  ...  Кард-костюм козырный;

Система типов Java, однако, рассматривает перечисления как тип, отдельный от целых чисел, и смешивание значений перечисления и целых чисел не допускается. Фактически, тип перечисления в Java на самом деле является специальным сгенерированным компилятором учебный класс а не арифметический тип, а значения перечисления ведут себя как глобальные предварительно сгенерированные экземпляры этого класса. Типы перечисления могут иметь методы экземпляра и конструктор (аргументы которого могут быть указаны отдельно для каждого значения перечисления). Все типы перечислений неявно расширяют Enum абстрактный класс. Тип перечисления не может быть создан напрямую.[6]

Внутри каждое значение перечисления содержит целое число, соответствующее порядку, в котором они объявлены в исходном коде, начиная с 0. Программист не может напрямую установить настраиваемое целое число для значения перечисления, но можно определить перегруженные конструкторы, которые затем могут назначать произвольные значения для самоопределяемых членов класса enum. Определение геттеров позволяет затем получить доступ к этим самоопределенным членам. Внутреннее целое число можно получить из значения перечисления с помощью порядковый () метод, а список значений перечисления типа перечисления может быть получен по порядку с помощью значения() метод. Обычно программистам не рекомендуется преобразовывать перечисления в целые числа и наоборот.[7] Перечислимые типы Сопоставимый, используя внутреннее целое число; в результате их можно отсортировать.

Стандартная библиотека Java предоставляет служебные классы для использования с перечислениями. В EnumSet класс реализует Набор значений перечисления; он реализован как битовый массив, что делает его очень компактным и таким же эффективным, как явное манипулирование битами, но более безопасным. В EnumMap класс реализует карта значений перечисления для объекта. Он реализован в виде массива, в котором целочисленное значение значения перечисления служит индексом.

Perl

Динамически набираемый языки в синтаксической традиции C (например, Perl или же JavaScript ), как правило, не содержат перечислений. Но в программировании на Perl такой же результат можно получить с помощью сокращения струны список и хеши (возможно ломтики ):

мой @enum = qw (Клубы Бриллианты Червы Пики);мой( % set1, % set2 );@ set1{@enum} = ();          # все очищено@ set2{@enum} = (1) Икс @enum; # все установлено в 1$ set1{Клубы} ...            # ложный$ set2{Бриллианты} ...         # истинный

Раку

Раку предоставляет перечисления. Существует несколько способов объявления перечислений в Raku, каждый из которых создает внутреннюю карту.

перечислить Кот <sphynx siamese bengal shorthair other>; # Использование "цитат-слов"
перечислить Кот ('сфинкс', 'сиамский', 'бенгальский', 'короткие волосы', 'Другой'); # Использование списка
перечислить Кот (сфинкс => 0, сиамский => 1, бенгальский => 2, короткие волосы => 3, Другой => 4); # Использование конструкторов Pair
перечислить Кот (:сфинкс(0), :сиамский(1), :бенгальский(2), короткие волосы(3), :Другой(4)); # Другой способ использования пар, вы также можете использовать `: 0sphynx`

Ржавчина

Хотя Rust использует перечислить такое ключевое слово, как C, оно используется для описания отмеченные союзы, перечисления которых можно рассматривать как вырожденную форму. Таким образом, перечисления Rust гораздо более гибкие и могут содержать варианты структур и кортежей.

перечислить Сообщение{Покидать,Двигаться{Икс: i32,у: i32 },// структураНаписать(Нить),// одноэлементный кортежСменить цвет(i32,i32,i32),// трехэлементный кортеж}

Быстрый

В C перечисления присваивают связанные имена набору целочисленных значений. В Быстрый, перечисления намного более гибкие и не должны предоставлять значение для каждого случая перечисления. Если значение (называемое сырой value) предоставляется для каждого случая перечисления, значение может быть строкой, символом или значением любого целочисленного типа или типа с плавающей запятой.

В качестве альтернативы варианты перечисления могут указывать связанные значения любого типа, которые должны храниться вместе с каждым другим значением варианта, так же, как объединения или варианты на других языках. Можно определить общий набор связанных наблюдений как часть одного перечисления, каждое из которых имеет свой набор значений соответствующих типов, связанных с ним.

В Swift перечисления - это первоклассный тип. Они используют многие функции, традиционно поддерживаемые только классами, такие как вычисляемые свойства для предоставления дополнительной информации о текущем значении перечисления и методы экземпляра для обеспечения функциональности, связанной со значениями, которые представляет перечисление. Перечисления могут также определять инициализаторы для предоставления начального значения case и могут быть расширены для расширения их функциональности за пределы их исходной реализации; и может соответствовать протоколам для обеспечения стандартной функциональности.

перечислить CardSuit {     дело клубы     дело бриллианты     дело сердца     дело лопаты}

В отличие от C и Цель-C, Случаям перечисления Swift не присваивается целочисленное значение по умолчанию при их создании. В приведенном выше примере CardSuit трефы, бубны, червы и пики неявно равны 0, 1, 2 и 3. Вместо этого различные варианты перечисления являются полноценными значениями сами по себе с явно определенным типом CardSuit. .

В одной строке может быть несколько вариантов, разделенных запятыми:

перечислить CardSuit {     дело клубы, бриллианты, сердца, лопаты}

При работе с перечислениями, в которых хранятся целые или строковые необработанные значения, нет необходимости явно назначать необработанное значение для каждого случая, поскольку Swift автоматически присваивает значения.

Например, когда целые числа используются для необработанных значений, неявное значение для каждого случая на единицу больше, чем в предыдущем случае. Если для первого случая значение не задано, его значение равно 0.

Приведенное ниже перечисление является уточнением предыдущего перечисления Planet с целыми необработанными значениями для представления порядка каждой планеты от солнца:

перечислить Планета: Int {     дело Меркурий = 1, Венера, земной шар, Марс, Юпитер, Сатурн, Уран, Нептун}

В приведенном выше примере Planet.mercury имеет явное исходное значение 1, Planet.venus имеет неявное исходное значение 2 и так далее.

«Подробности можно найти в документации Swift в Интернете здесь».

Машинопись

Полезным дополнением к стандартному набору типов данных из JavaScript является enum. Подобно таким языкам, как C #, перечисление - это способ дать более понятные имена наборам числовых значений.

перечислить Кардсьют {Клубы, Бриллианты, Сердца, Лопаты};вар c: Кард-костюм = Кардсьют.Бриллианты;

По умолчанию перечисления начинают нумерацию своих членов, начиная с 0. Это можно изменить, вручную установив значение одного из его членов. Например, предыдущий пример может начинаться с 1 вместо 0:

перечислить Кард-костюм {Клубы = 1, Бриллианты, Сердца, Лопаты};вар c: Кард-костюм = Кард-костюм.Бриллианты;

Или даже вручную установить все значения в перечислении:

перечислить Кард-костюм {Клубы = 1, Бриллианты = 2, Сердца = 4, Лопаты = 8};вар c: Кард-костюм = Кардсьют.Бриллианты;

Удобная функция перечислений в TypeScript заключается в том, что вы также можете перейти от числового значения к имени этого значения в перечислении. Например, если представлено значение 2, но вы не знаете, какое из них сопоставлено в перечислении, можно найти соответствующее имя:

перечислить Кард-костюм {Клубы = 1, Бриллианты, Сердца, Лопаты};вар suitName: нить = Кард-костюм[2];тревога(suitName);

Python

An перечислить модуль был добавлен в стандартную библиотеку Python в версии 3.4.

из перечислить импорт Enumучебный класс Открытки(Enum):    клубы = 1    бриллианты = 2    сердца = 3    лопаты = 4

Также есть функциональный API для создания перечислений с автоматически генерируемыми индексами (начиная с единицы):

Открытки = Enum("Открытки", ["клубы", "бриллианты", "сердца", "пики"])

Перечисления Python не обеспечивают семантическую корректность (бессмысленное сравнение с несовместимым перечислением всегда возвращает Ложь вместо того, чтобы поднять TypeError):

>>> Цвет = Enum("Цвет", ["красный", "зеленый", "синий"])>>> Форма = Enum("Форма", ["круг", "треугольник", "квадрат", "шестиугольник"])>>> def has_vertices(форма):... 	возвращаться форма != Форма.круг...>>> has_vertices(Цвет.зеленый)Истинный

Фортран

Фортран имеет только перечислимые типы для взаимодействия с C; следовательно, семантика аналогична C и, как и в C, значения перечисления являются просто целыми числами, и никакая дополнительная проверка типа не выполняется. Пример C, приведенный выше, можно записать на Фортране как

  перечислить, связывать( C )    счетчик :: КЛУБЫ = 1, АЛМАЗЫ = 2, СЕРДЦА = 4, ЛОПАТЫ = 8  конец перечисления

Visual Basic / VBA

Пронумерованные типы данных в Visual Basic (до версии 6) и VBA автоматически присваиваются "Длинный"тип данных, а также сами становятся типом данных:

'С нуляEnum CardSuit   Клубы   Бриллианты   Сердца   ЛопатыКонец EnumSub EnumExample()    Тусклый подходить В качестве CardSuit    подходить = Бриллианты    MsgBox подходитьКонец Sub

Пример кода в VB.NET

Enum CardSuit        Клубы        Бриллианты        Сердца        ЛопатыКонец EnumSub EnumExample()        Тусклый подходить В качестве CardSuit        подходить = CardSuit.Бриллианты        Окно сообщения.Показать(подходить)Конец Sub


Лисп

Common Lisp использует спецификатор типа члена, например,

(deftype костюм ()  '(член клуб алмаз сердце лопата))

в котором говорится, что объект относится к типу костюма, если он # 'eql к дубинке, алмазу, черву или лопате. Спецификатор типа члена недействителен в качестве Общая объектная система Lisp Однако (CLOS) специализатор параметров. Вместо, (атом экв), что эквивалентно (атом-член) может использоваться (то есть только один член набора может быть указан с помощью спецификатора типа eql, однако он может использоваться как специализатор параметра CLOS.) Другими словами, для определения методов, охватывающих перечислимый тип, метод должен быть определен для каждого конкретного элемента этого типа.

Кроме того,

(deftype тип набора конечных элементов (&отдых элементы)   `(член ,@элементы))

может использоваться для определения произвольных перечислимых типов во время выполнения. Например

(тип набора конечных элементов клуб алмаз сердце лопата)

будет относиться к типу, эквивалентному предыдущему определению carduit, поскольку, конечно, просто использовалось бы

(член клуб алмаз сердце лопата)

но может быть менее запутанным с функцией #'член по стилистическим причинам.

Алгебраический тип данных в функциональном программировании

В функциональное программирование языков в ML происхождение (например, Стандартный ML (SML), OCaml, и Haskell ), алгебраический тип данных только с конструкторы с нулевым значением может использоваться для реализации перечислимого типа. Например (в синтаксисе подписей SML):

 тип данных костюм = Клубы | Бриллианты | Сердца | Лопаты тип карта = { подходить: костюм; ценить: int } вал рука : карта список вал козырный : костюм

В этих языках представление с малым целым числом полностью скрыто от программиста, если такое представление действительно используется реализацией. Однако в Haskell есть Enum тип класс который тип может наследовать или реализовать, чтобы получить сопоставление между типом и Int.

Базы данных

Немного базы данных напрямую поддерживают перечисляемые типы. MySQL предоставляет перечислимый тип ENUM с допустимыми значениями, указанными в виде строк при создании таблицы. Значения сохраняются как числовые индексы, при этом пустая строка хранится как 0, первое строковое значение хранится как 1, второе строковое значение сохраняется как 2 и т. Д. Значения могут быть сохранены и извлечены как числовые индексы или строковые значения.

Схема XML

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

 имя ="кардсьют">  <xs:simpleType>     база ="xs: строка">       значение ="Клубы"/>       значение ="Бриллианты"/>       значение ="Сердечки"/>       значение ="Пики"/>    </xs:restriction>  </xs:simpleType></xs:element>

Смотрите также

Рекомендации

  1. ^ Керниган, Брайан В.; Ричи, Деннис М. (Февраль 1978 г.). Язык программирования C (1-е изд.). Энглвуд Клиффс, Нью-Джерси: Prentice Hall. ISBN  0-13-110163-3.
  2. ^ Обасанджо, Дэйр (2007). «Сравнение языка программирования C # от Microsoft с языком программирования Java от Sun Microsystems». Архивировано из оригинал на 2007 год. Получено 2012-09-06. В Java перечисляемые типы представляют собой полноценный класс, что означает, что они безопасны по типу и могут быть расширены путем добавления методов, полей или даже реализации интерфейсов. В то время как в C # перечислимый тип - это просто синтаксический сахар вокруг интегрального типа (обычно int), что означает, что они не могут быть расширены и не являются типобезопасными.
  3. ^ Грунц, Доминик, проф. Д-р (2005-04-08). «Java 5: Укрощение тигра: синтаксический сахар» (на немецком). Fachhochschule Aargau, Nordwestschweiz. Архивировано из оригинал на 2007-01-07. Получено 2012-09-10. Enumerationen sind die heimlichen Sieger von Java 1.5. Nach vielen Beteuerungen durch Sun, Enums seien in Java überflüssig und können einfach nachgebildet werden, wurden sie nun doch eingeführt. Die einfachste Möglichkeit einer Enumeration der Jahreszeiten sieht wie folgt aus… Das Schlüsselwort enum steht für eine spezielle Art von Klasse, die eine Enumeration Definiert. … Im Gegensatz zu anderen Programmiersprachen wie C / C ++ и C # kann man ihnen per Gleichheitszeichen keine ganzen Zahlen zuordnen. Альтернативный URL
  4. ^ Трутер, Кристофф (2011-08-04). «Синтаксический сахар (C #): Enum». CSTrüter. Архивировано из оригинал на 2011-08-04. Получено 2012-09-10. // Плохо спроектированный enum этого не делает… Очевидно (как и все остальное), мы можем неправильно использовать этот кусок сахара, в результате чего система страдает от гипергликемии.… Поскольку базовым типом нашего перечисления является int (также можно использовать другие целочисленные типы), это может привести к некоторым интересным проблемам при использовании перечисления в качестве битовых флагов с помощью побитовых операторов.
  5. ^ «Эффективный ход». golang.org. Авторы Go. Получено 2014-05-13.
  6. ^ "Типы перечислений". Oracle. Получено 2013-12-05.
  7. ^ Блох, Джошуа (2008). Эффективная Java (Второе изд.). Река Аппер Сэдл, Нью-Джерси: Аддисон-Уэсли. п.158. ISBN  978-0-321-35668-0.

внешняя ссылка