ビット演算でフラグを管理する
複数のフラグを管理したい場合、いちいちDBに専用のカラムを追加していくのはめんどくさいです。(もちろんそのフラグで絞り込みたい場合は別ですが。)
ビット演算でフラグを判定する
ビット演算でフラグを判定すれば、フラグの管理がスリムになります。
FLAG_1 = 0b0001 FLAG_2 = 0b0010 FLAG_3 = 0b0100 FLAG_4 = 0b1000 status = 0b1010 if ((FLAG_1 & status) > 0) puts 'フラグ1はtrueです' else puts 'フラグ1はfalseです' end if ((FLAG_2 & status) > 0) puts 'フラグ2はtrueです' else puts 'フラグ2はfalseです' end if ((FLAG_3 & status) > 0) puts 'フラグ3はtrueです' else puts 'フラグ3はfalseです' end if ((FLAG_4 & status) > 0) puts 'フラグ4はtrueです' else puts 'フラグ4はfalseです' end
出力結果
フラグ1はfalseです フラグ2はtrueです フラグ3はfalseです フラグ4はtrueです
仕組み
2進数のどの桁が1になっているかを見て、flagがtrueかfalseかを判定します。
元となるフラグの2進数と、現在のステータスの2進数を「&」演算子でビット演算を行うことで、両方が1の時だけtrueになります。
まとめ
フラグを増やしたい時は、定数を増やすだけで判定できるので、管理が簡単になります。