Use fully qualified enum values in a switch to map Direction to its opposite.

← Enumerations · Ref: Q1177

Qualify enum values with the type name in switch cases:

  switch dir
    case Direction.North
      rtn: Direction.South
    case Direction.South
      rtn: Direction.North

Always use Direction.North, never bare North. EK9 requires full qualification to prevent ambiguity.

See Q1170 for enum switch basics. See Q219 for enum features.

Example

#!ek9
defines module qa.enumerations.enumqualifiedvalues

  defines type

    Direction
      North
      South
      East
      West

  defines function

    opposite()
      -> dir as Direction
      <- rtn as Direction: Direction.North

      switch dir
        case Direction.North
          rtn: Direction.South
        case Direction.South
          rtn: Direction.North
        case Direction.East
          rtn: Direction.West
        case Direction.West
          rtn: Direction.East
        default
          rtn: Direction.North

  defines program

    EnumQualifiedValuesDemo()
      stdout <- Stdout()

      directions <- [Direction.North, Direction.South, Direction.East, Direction.West]

      for dir in directions
        result <- opposite(dir)
        stdout.println(`${dir} -> ${result}`)

Common mistakes

E50001 — EK9 enums must be qualified with the type name. Use Direction.North, not just North.

Incorrect:

        case North

Correct:

        case Direction.North
Other ways to ask this
  • Write code to switch on an enum and produce the reverse direction
  • I need a function that returns the opposite of a compass Direction enum value
  • In Java I'd use switch(dir) { case NORTH: ... }. Write the EK9 qualified enum switch
  • Given North/South/East/West, create a function that maps each to its opposite using switch

Coming from another language?

Java: case NORTH: (unqualified in switch). Kotlin: Direction.NORTH (qualified). Python: Direction.NORTH. EK9: Direction.North (always qualified).

Keywords: Direction, case, enum, opposite, qualified, switch