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

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: enum, qualified, switch, Direction, opposite, case