昔のソースは恐ぇ

昔のソースを読んでいて見つけた箇所。

360°を8方向に分けるコード。正面が-23°から22°という仕様。

if (a <= 22 && a >= 0) {
	s = Direction.FRONT;
} else if (a >= 23 && a <= 67) {
	s = Direction.RIGHT_FRONT;
} else if (a >= 68 && a <= 112) {
	s = Direction.RIGHT;
} else if (a >= 113 && a <= 157) {
	s = Direction.RIGHT_BACK;
} else if (a >= 158 && a <= 202) {
	s = Direction.BACK;
} else if (a >= 203 && a <= 247) {
	s = Direction.LEFT_BACK;
} else if (a >= 248 && a <= 292) {
	s = Direction.LEFT;
} else if (a >= 293 && a <= 337) {
	s = Direction.LEFT_FRONT;
} else if (a >= 338 && a <= 359) {
	s = Direction.FRONT;
}

aが0°未満か360°以上でIllegalArgumentExceptionが発生する。
俺が書いたわけではないが、多分ソースレビューしたと思う。

俺なら多分こんな感じ。(実際にはreturn文で使ってる配列はstaticに持っていると思うが)

int dir = ((a + 23) % 360) / 45;
return {Direction.FRONT,
        Direction.RIGHT_FRONT,
        Direction.RIGHT,
        Direction.RIGHT_BACK,
        Direction.BACK,
        Direction.LEFT_BACK,
        Direction.LEFT,
        Direction.LEFT_FRONT}[dir];

で、こうなってないってことはifのほうがわかりやすいと思ったか、気を抜いたかだ。

たしかに、ソースを読んでやりたいことと処理内容はすぐわかった。
当時の俺はどっちだったんだろう。