Por que a Enumeração de Bandeiras é considerada uma habilidade intermediária?

8

Eu estava lendo este artigo: Projetando Enumerações de Bandeiras @ msdn e ele diz

A combinação de valores de enumeração de sinalizadores é uma habilidade intermediária que não deve ser necessária para desenvolvedores que implementam cenários comuns.

Eu acho que a enumeração de sinalizadores é incrível - algo que aprendi durante minha experiência com C.

Por que parece que este artigo está alertando os desenvolvedores para o que considero uma habilidade útil (e não complexa)?

Rowan Freeman
fonte

Respostas:

17

Como em muitos conceitos de computação, aqueles que os entendem não os acham difíceis. Você está entre essas pessoas; Parabéns!

Isso não muda o fato de que a aritmética bit a bit parece estranha e difícil de entender para muitas pessoas, porque usa um elemento de linguagem (números) com o qual elas são usadas para lidar de uma maneira (por magnitude absoluta) de uma maneira muito diferente (com significados diferentes para cada bit, independentemente de seu 'valor' no sistema numérico normal.)

Sim, existem pessoas para quem isso é difícil, e sim, existem muitas posições que podem ser preenchidas por pessoas que não se incomodam em aprender aritmética. Isso é o que "intermediário" significa aqui.

Kilian Foth
fonte
5

O artigo diz

Considere fornecer valores de enumeração especiais para combinações de sinalizadores comumente usadas.

Obviamente, não é realmente difícil combinar diferentes sinalizadores usando o "|" operador, mas fornecer valores especiais de enumeração tem a seguinte vantagem:

  • mais fácil de ler:

    MyEnumeration.MyFlag1 | MyEnumeration.MyFlag2 | MyEnumeration.MyFlag3

    tende a ficar muito mais demorado do que

    MyEnumeration.MyCombinedFlags123

  • deixa imediatamente claro que a combinação específica de sinalizadores é uma combinação legal (que pode ou não ser o caso para todas as outras combinações)

Não obstante, li esta frase do artigo não como "não faça isso, nunca", apenas como "tornar mais fácil para o caso comum". Não há nada a dizer contra não ter um valor enum especial para uma combinação raramente usada.

Doc Brown
fonte