Rever

O que é um enum em linguagens de programação?

O que é um enum em linguagens de programação?


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Abreviação de enumeração, um tipo de variável enum pode ser encontrado em C (ANSI, não no K&R original), C ++ e C #. A idéia é que, em vez de usar um int para representar um conjunto de valores, um tipo com um conjunto restrito de valores seja usado.

Por exemplo, se usarmos as cores do arco-íris, que são

  1. Vermelho
  2. laranja
  3. Amarelo
  4. Verde
  5. Azul
  6. Índigo
  7. Tolet

Se não houver enumerações, você pode usar um #definir (em C) ou const em C ++ / C # para especificar esses valores. Por exemplo

Ints demais para contar!

O problema disso é que existem muito mais entradas do que cores. Se violeta tem o valor 7 e o programa atribui um valor de 15 a uma variável, é claramente um erro, mas pode não ser detectado, pois 15 é um valor válido para um int.

Enums para o resgate

Uma enum é um tipo definido pelo usuário que consiste em um conjunto de constantes nomeadas chamadas enumeradores. As cores do arco-íris seriam mapeadas assim:

Agora internamente, o compilador usará um int para retê-los e, se nenhum valor for fornecido, o vermelho será 0, a laranja será 1 etc.

Qual é o benefício de um Enum?

O ponto é que cores do arco-íris é um tipo e apenas outras variáveis ​​do mesmo tipo podem ser atribuídas a ele. C é mais fácil (ou seja, menos estritamente digitado), mas C ++ e C # não permitem atribuição, a menos que você a force usando uma conversão.

Você não está preso a esses valores gerados pelo compilador, pode atribuir sua própria constante inteira a eles, como mostrado aqui.

Ter azul e índigo com o mesmo valor não é um erro, pois os enumeradores podem incluir sinônimos como escarlate e vermelho.

Diferenças de idioma

Em C, a declaração da variável deve ser precedida pela palavra enum como em

No entanto, em C ++, não é necessário, pois cores do arco-íris é um tipo distinto que não precisa do prefixo do tipo enum.

Em C #, os valores são acessados ​​pelo nome do tipo, como em

Qual é o ponto de enums?

O uso de enums aumenta o nível de abstração e permite que o programador pense no que os valores significam, em vez de se preocupar com como eles são armazenados e acessados. Isso reduz a ocorrência de erros.

Aqui está um exemplo. Temos um conjunto de semáforos com três lâmpadas. vermelho, amarelo e verde. No Reino Unido, a sequência dos semáforos muda nessas quatro fases.

  1. Vermelho - Tráfego parado.
  2. Ambos Vermelho e Amarelo - O tráfego ainda parou, mas as luzes estão prestes a mudar para verde.
  3. Verde - O tráfego pode se mover.
  4. Amarelo - Aviso de mudança iminente para vermelho.

Exemplo de semáforo

As luzes são controladas escrevendo nos três bits inferiores de um byte de controle. Estes são apresentados como um padrão de bits abaixo em binário, em que RYG representa os três bits. Se R for 1, a luz vermelha está acesa etc.

Nesse caso, é fácil ver que os quatro estados acima correspondem aos valores 4 = Vermelho on, 6 = Vermelho + Amarelo ambos em, 1 = Verde ligado e 2 = Amarelo em.

Com esta função

Usando uma classe em vez de enums

Em C ++ e C #, precisaríamos criar uma classe e sobrecarregar o operador | para permitir OR de tipos luzes de trânsito.

Ao usar enums, evitamos que problemas com outros bits sejam atribuídos ao byte de controle do bulbo. Pode ser que alguns dos outros bits controlem o autoteste ou um comutador "Green Lane". Nesse caso, um bug que permita que esses bits sejam configurados em uso normal pode causar estragos.

Para ter certeza, mascararíamos os bits no SetTrafficlights () função, não importa qual valor seja passado, apenas os três bits inferiores serão alterados.

Conclusão

As enums têm os seguintes benefícios:

  • Eles restringem os valores que a variável enum pode receber.
  • Eles o forçam a pensar em todos os valores possíveis que o enum pode assumir.
  • Eles são uma constante e não um número, aumentando a legibilidade do código fonte


Video, Sitemap-Video, Sitemap-Videos