昔のソースは恐ぇ
昔のソースを読んでいて見つけた箇所。
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のほうがわかりやすいと思ったか、気を抜いたかだ。
たしかに、ソースを読んでやりたいことと処理内容はすぐわかった。
当時の俺はどっちだったんだろう。