diff --git a/TECHDEBT.md b/TECHDEBT.md index 37b2788..a6a3143 100644 --- a/TECHDEBT.md +++ b/TECHDEBT.md @@ -1,7 +1,20 @@ # TODO - [ ] Complexity - - [ ] long method + - [x] long method - [ ] duplicated code + - +# Mikado +- [ ] Clean up constants and private fields + - [ ] Move move() into Heading.move(Position) + - [ ] Move turnLeft() into Heading.turnLeft() + - [ ] Move turnRight() into Heading.turnRight() + - [x] Remove HEADING_* constants + - [x] in move() compare to heading enum + - [x] in turnRight() compare to heading enum + - [x] in turnLeft() compare to heading enum + - [x] state.heading in Rover.constructor to enum + - [x] Change heading Char in RoverState to Heading enum + - [x] Create Heading enum # RPP - [ ] Reorder Responsibilities diff --git a/src/main/kotlin/org/example/Heading.kt b/src/main/kotlin/org/example/Heading.kt new file mode 100644 index 0000000..1e60597 --- /dev/null +++ b/src/main/kotlin/org/example/Heading.kt @@ -0,0 +1,14 @@ +package org.example + +enum class Heading(val symbol: Char) { + NORTH('N'), + EAST('E'), + SOUTH('S'), + WEST('W'); + + override fun toString(): String = symbol.toString() + + companion object { + fun from(symbol: Char): Heading? = entries.firstOrNull { it.symbol == symbol } + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/example/Rover.kt b/src/main/kotlin/org/example/Rover.kt index 70150dc..b782509 100644 --- a/src/main/kotlin/org/example/Rover.kt +++ b/src/main/kotlin/org/example/Rover.kt @@ -6,7 +6,7 @@ class Rover { if (command.size >= ROVER_MINIMUM_NEEDED_COMMANDS) { state.positionX = command[ROVER_STARTING_POSITION_X].toInt() state.positionY = command[ROVER_STARTING_POSITION_Y].toInt() - state.heading = command[ROVER_FACING_DIRECTION][ROVER_COMMANDLIST_DIRECTION] + state.heading = Heading.from(command[ROVER_FACING_DIRECTION][ROVER_COMMANDLIST_DIRECTION]) ?: Heading.NORTH } } @@ -22,28 +22,28 @@ class Rover { private fun move() { when (state.heading) { - HEADING_EAST -> state.positionX++ - HEADING_SOUTH -> state.positionY-- - HEADING_WEST -> state.positionX-- - HEADING_NORTH -> state.positionY++ + Heading.EAST -> state.positionX++ + Heading.SOUTH -> state.positionY-- + Heading.WEST -> state.positionX-- + Heading.NORTH -> state.positionY++ } } private fun turnRight() { when (state.heading) { - HEADING_EAST -> state.heading = HEADING_SOUTH - HEADING_SOUTH -> state.heading = HEADING_WEST - HEADING_WEST -> state.heading = HEADING_NORTH - HEADING_NORTH -> state.heading = HEADING_EAST + Heading.EAST -> state.heading = Heading.SOUTH + Heading.SOUTH -> state.heading = Heading.WEST + Heading.WEST -> state.heading = Heading.NORTH + Heading.NORTH -> state.heading = Heading.EAST } } private fun turnLeft() { when (state.heading) { - HEADING_EAST -> state.heading = HEADING_NORTH - HEADING_NORTH -> state.heading = HEADING_WEST - HEADING_WEST -> state.heading = HEADING_SOUTH - HEADING_SOUTH -> state.heading = HEADING_EAST + Heading.EAST -> state.heading = Heading.NORTH + Heading.NORTH -> state.heading = Heading.WEST + Heading.WEST -> state.heading = Heading.SOUTH + Heading.SOUTH -> state.heading = Heading.EAST } } @@ -64,8 +64,3 @@ private const val ROVER_COMMANDLIST_DIRECTION = 0 private const val COMMAND_TURN_LEFT = 'L' private const val COMMAND_TURN_RIGHT = 'R' private const val COMMAND_MOVE = 'M' - -internal const val HEADING_EAST = 'E' -internal const val HEADING_NORTH = 'N' -internal const val HEADING_WEST = 'W' -internal const val HEADING_SOUTH = 'S' diff --git a/src/main/kotlin/org/example/RoverState.kt b/src/main/kotlin/org/example/RoverState.kt index 708e310..2dc282c 100644 --- a/src/main/kotlin/org/example/RoverState.kt +++ b/src/main/kotlin/org/example/RoverState.kt @@ -3,5 +3,5 @@ package org.example class RoverState { var positionX: Int = 0 var positionY: Int = 0 - var heading: Char = HEADING_NORTH + var heading: Heading = Heading.NORTH }