How do I declare multiple parameters on a function in EK9?

← Syntax and Structure Rules · Ref: Q916

EK9 uses ONE -> arrow followed by indented parameters below it. Parameters are NOT comma-separated on one line.

CORRECT SYNTAX

One -> arrow, then each parameter on its own indented line:

  greet()
    ->
      name as String
      age as Integer
    <- rtn as String: `${name} is ${$age}`

SINGLE PARAMETER SHORTHAND

For a single parameter, you can put it on the same line as ->:

  greet()
    -> name as String
    <- rtn as String: `Hello ${name}`

WHAT NOT TO DO

- Do NOT use commas between parameters
- Do NOT put multiple parameters on one line
- Do NOT use multiple -> arrows
- Do NOT use parentheses around parameters

WRONG PATTERNS (do not compile)

  greet(name as String, age as Integer)    WRONG: not C-style
  greet()
    -> name as String, age as Integer      WRONG: no commas
  greet()
    -> name as String
    -> age as Integer                      WRONG: only one ->

CONSTRUCTOR PARAMETERS

Constructors follow the same rule:

  MyClass()
    ->
      name as String
      score as Integer
    this.name :=: name
    this.score :=: score

See Q894 for constructor parameter syntax. See Q893 for section headers. See Q907 for EK9 structure overview.

Example

defines module qa.syntaxrules.arrowparams

  defines function

    // Single parameter — shorthand on same line as ->
    greetSimple() as pure
      -> name as String
      <- rtn as String: `Hello ${name}`

    // Multiple parameters — -> then indented below
    greetPerson() as pure
      ->
        name as String
        age as Integer
      <- rtn as String: `${name} is ${age}`

    // Three parameters
    formatEntry() as pure
      ->
        key as String
        setting as String
        index as Integer
      <- rtn as String: `${index}: ${key}=${setting}`

  defines program

    ParamArrowDemo()
      stdout <- Stdout()

      // === Single parameter ===

      stdout.println(greetSimple("Steve"))

      // === Multiple parameters ===

      stdout.println(greetPerson("Alice", 30))

      // === Three parameters ===

      stdout.println(formatEntry("userName", "Bob", 1))
      stdout.println(formatEntry("userRole", "dev", 2))

Common mistakes

E01082 — EK9 does not allow multiple -> arrows. Use ONE -> arrow then indent each parameter on its own line below. Multiple -> arrows trigger E01082. See ek9 -h E01082 for details.

Incorrect:

    greetPerson() as pure
      -> name as String
      -> age as Integer

Correct:

    greetPerson() as pure
      ->
        name as String
        age as Integer
Other ways to ask this
  • Can I put all parameters on one line in EK9?
  • What does the -> arrow mean for parameters in EK9?
  • How do I use the parameter arrow in EK9?

Coming from another language?

Java: method(String name, int age) comma-separated in parentheses. Python: def method(name, age) comma-separated. Rust: fn method(name: String, age: i32) comma-separated. Go: func method(name string, age int) comma-separated. EK9: ONE -> arrow then indented parameters, each on its own line.

Keywords: function, declaration, indent, syntax, multiple, arrow, parameter