2値の対称な状態には bool を使わないほうが良い

たとえば、増加と減少、や、売りと買い、のように2値の状態をとる変数があるとする。
普通はつぎのように bool を使うことが多い。

bool up; // true で増加、false で減少。
や
bool increment; // true でインクリメント、false でデクリメント。
や
bool buy; // true で買い、false で売り。
など。

しかし、これはやめたほうが良いと、最近思うようになってきた。enum や struct/class で2値のものを自分で定義したほうが良い。

// 増減の向き。
public enum Direction
{
    // 増加する。ソートの場合は昇順。
    Up,

    // 減少する。ソートの場合は降順。
    Down,
}

のような感じ。
なぜ bool を使わないほうが良いかというと、bool 自体は2値であり true と false は単にビットのオンオフの意味だから、それ自体は対称だ。しかし、if 文で使うときには if (x) { } else { } とするとどうしても、優先度が違う。なんとなく true が正常であり、false が異常という意味合いが出てきてしまう。
また、bool 型のインスタンス変数を初期化しなくても勝手に false になってしまう。
また、変数名を名付けるときも true の状態を基本として名付けないといけなくなってしまう。たとえば売買(売りまたは買い)という状態を保持する変数だから、「売買」という名前を付けたいのに bool 型だと「買い」という名前を付けないといけなくなる。たとえば enum や struct/class を使えば、状態の総称と、個々の状態の名前は分けて付けることができる。