Why does EK9 reject repeated parameter groups across functions?

← Code Quality · Ref: Q855

When 3+ functions share 4+ parameters with matching names and types, EK9 detects a data clump (E11053). Extract the parameters into a record.

See Q97 for class vs record. See Q311 for quality checks.

Example

defines module qa.quality.data.clump.record

  defines record

    Address
      street <- String()
      city <- String()
      state <- String()
      zipCode <- String()

      Address()
        ->
          s as String
          c as String
          st as String
          z as String
        street :=: s
        city :=: c
        state :=: st
        zipCode :=: z

      operator <=> as pure
        -> arg0 as Address
        <- rtn as Integer: street <=> arg0.street

      default operator

  defines function

    formatAddress() as pure
      -> addr as Address
      <- rtn as String: `${addr.street}, ${addr.city}`

    validateAddress() as pure
      -> addr as Address
      <- rtn as Boolean: addr.street? and addr.city?

    normalizeAddress()
      -> addr as Address
      <- rtn as Address: Address(s: addr.street, c: addr.city, st: addr.state.upperCase(), z: addr.zipCode)

  defines program

    DataClumpDemo()
      stdout <- Stdout()
      addr <- Address(s: "123 Main", c: "Springfield", st: "IL", z: "62704")
      if validateAddress(addr)
        stdout.println(formatAddress(addr))
Other ways to ask this
  • What triggers E11053 DATA_CLUMP_DETECTED?
  • Why should I extract repeated parameters into a record?
  • What is a data clump in EK9?

Coming from another language?

Java: no detection, relies on SonarQube. Python: no type-aware detection. Go: favors structs but not enforced. EK9: compile-time error requiring record extraction.

Keywords: parameter, E11053, extract, record, clump, quality, data