ComparableとかComparatorとか
Comparable#compareToとかComparator#compareとか、比較メソッドで戻り値にintを返すものがある。
例えば前者でa.compareTo(b)とした場合、戻り値はa>bならば正の数、a*1で、文面だけで覚えていると使うとき(または読むとき)に少し考えてしまう、という人も多いだろう。実際隣のプログラマはソースを見て結果を即答できなかった。
実はちょっとしたコツを知っていると、この仕様はとても便利なのだ。
とにかく戻り値を、右辺を0にして比較する。そうすると、その0との比較演算子がオブジェクト(上記で言うaとb)間の関係と同じになる。
a.compareTo(b) == 0 // a == b a.compareTo(b) >= 0 // a >= b a.compareTo(b) <= 0 // a <= b comparator.compare(a,b) == 0 // a == b comparator.compare(a,b) > 0 // a > b comparator.compare(a,b) < 0 // a < b
わかりやすいでしょ?
0を左辺に置くと比較演算子は当然逆になってしまうので注意。
残念なことに・・現在自分が参画しているプロジェクトでは比較演算子の方向をless thanに統一する、という規約がある為、
0 <= a.compareTo(b)
などと書かなければならない。ちょっとだけどストレスを感じて残念。