演算子の優先順位

if (hoge || foo && bar) {
  // ...
}

&&演算子の方が優先度が高いため、上記のコードは

if (hoge || (foo && bar)) {
  // ...
}

と解釈されるが、自分の脳内ではなぜか

if ((hoge || foo) && bar) {
  // ...
}

となっていたためにしょぼいバグを生んでいた。欝。

Cでも論理和より論理積のほうが優先順位高いし、なんでこんなコード書いてしまったのか理解できない。自信ないときは括弧付けとけと。1年生の間違いだよなぁ……。戒めのために晒しておく。