Enumeração (tipo de dado)

Origem: Wikipédia, a enciclopédia livre.

Em programação, uma enumeração é um tipo de dado abstrato, cujos valores são atribuídos a exatamente um elemento de um conjunto finito de identificadores escolhidos pelo programador. Esse tipo é geralmente usado para variáveis categóricas (como os naipes de um baralho), que não possuem uma ordem numérica definida.

Em tempo de execução, um tipo de dado enumerado é geralmente implementado usado-se inteiros. Entretanto, comparando-se a usar somente inteiros, os tipos enumerados tornam o código fonte mais bem documentado que através do uso explícito de "números mágicos". Dependendo da linguagem, a representação de inteiro pode não ser visível ao programador, o que previne operações como aritmética de enumerações.

Em algumas linguagens, o tipo booleano é declarado como uma enumeração de dois valores, verdadeiro e falso.

Uso prático[editar | editar código-fonte]

O dialeto original da linguagem C não possuía enumerações, mas para o padrão ANSI (C89) elas foram adicionadas. Nessa linguagem, enumerações são criadas definindo-se explicitamente os elementos com o uso da palavra-chave enum:

enum cardsuit {
    CLUBS    = 1,
    DIAMONDS = 2,
    HEARTS   = 4,
    SPADES   = 8,
    FIRST = 10,
    SECOND,    //igual a 11
    THIRD,       //igual a 12
};

a atribuição de um inteiro a cada elemento da enumeração é opcional, e definido automaticamente pelo compilador caso omitido.

A sintaxe de enumerações em Java é parecida com a de C. Entretanto, o sistema de tipos de Java trata as enumerações como um tipo diferente de inteiros, e não possível converter implicitamente entre inteiros e enumerações. De fato, em Java, um tipo de enumeração é uma pequena classe e não um tipo aritmético.

Linguagens sem tipagem de dados (como Perl e JavaScript) geralmente não fornecem enumerações. No caso do JavaScript é possível improvisar uma enumeração usando objetos (Literalmente ou com o construtor Object), como no exemplo abaixo.[1]

var Dias = {
        DOMINGO: 1,
        SEGUNDA: 2,
        TERÇA: 3,
        QUARTA: 4,
        QUINTA: 5,
        SEXTA: 6,
        SÁBADO: 7
};

Em linguagens funcionais na linha de ML, um tipo de dado algébrico pode ser usado para implementar enumerações. por exemplo:

   datatype cardsuit = Clubs | Diamonds | Hearts | Spades
   type card = { suit: cardsuit; value: int }
   val hand : card list
   val trump : cardsuit

Em Common Lisp usa-se o especificador de tipos de membros, como:

  (deftype cardsuit ()
      '(member club diamond heart spade))

O código acima define que objetos são do tipo cardsuit se for igual a club, diamond, heart ou spade.

Alguns SGBDs suportam enumerações diretamente. MySQL fornece um tipo enumerado ENUM com valores permitidos definidos através de cadeias de caracteres quando uma tabela é criada. Os valores são armazenados como índices numéricos.

Referências

  1. «Creating Javascript Enum values». www.ezineasp.net. Consultado em 15 de julho de 2012