私はこの記事を読んでいました:Designing Flags Enumerations @ msdnそしてそれは言う
フラグ列挙値の組み合わせは中間スキルであり、一般的なシナリオを実装する開発者には必要ありません。
フラグの列挙は素晴らしいと思います-Cでの経験の中で学んだことです。
なぜこの記事は、私が有用な(そして複雑ではない)スキルであると考えるものから離れて開発者に警告しているように見えるのですか?
私はこの記事を読んでいました:Designing Flags Enumerations @ msdnそしてそれは言う
フラグ列挙値の組み合わせは中間スキルであり、一般的なシナリオを実装する開発者には必要ありません。
フラグの列挙は素晴らしいと思います-Cでの経験の中で学んだことです。
なぜこの記事は、私が有用な(そして複雑ではない)スキルであると考えるものから離れて開発者に警告しているように見えるのですか?
回答:
多くのコンピューティングの概念と同様に、それらを理解している人は、それらを難しくはありません。あなたはそれらの人々の中にいます。おめでとう!
これは、ビット単位の算術が奇妙に見え、多くの人にとって理解しにくいという事実を変えるものではありません。これは、非常に異なる方法で(絶対等級の)1つの方法で処理するために使用される言語要素(数値)を使用するためです。通常の数値システムの「値」に関係なく、ビットごとに異なる意味。
はい、これが難しい人がいます、そしてはい、ビット算術を学ぶことに煩わされていない人によって満たされることができる多くのポジションがあります。これが「中間」の意味です。
記事は言う
フラグの一般的に使用される組み合わせに特別な列挙値を提供することを検討してください。
もちろん、「|」を使用して異なるフラグを組み合わせるのはそれほど難しくありません 演算子ですが、特別な列挙値を提供すると、次の利点があります。
読みやすく:
MyEnumeration.MyFlag1 | MyEnumeration.MyFlag2 | MyEnumeration.MyFlag3
よりもはるかに長くなる傾向があります
MyEnumeration.MyCombinedFlags123
フラグの特定の組み合わせが正当な組み合わせであることをすぐに明らかにします(他のすべての組み合わせの場合もそうでない場合もあります)。
それにもかかわらず、私はこの記事を「これをしないでください、絶対にしない」ではなく、「一般的なケースで簡単にする」のような記事から読みました。めったに使用されない組み合わせに対して特別な列挙値を持たないことに反対することは何もありません。