Why does EK9 require named arguments for multiple Boolean parameters?
← Code Quality · Ref: Q816
EK9 requires named arguments when a call passes 2 or more Boolean literals. This prevents the 'Boolean blindness' anti-pattern.
THE PROBLEM
Positional Boolean arguments are unreadable at the call site:
connect('db', 5432, true, false) // what do true and false mean?
Without checking the function signature, the reader has no idea what each Boolean controls.
THE RULE
One Boolean literal is fine — context usually makes it clear:
setVisible(true) // obviously sets visibility
Two or more Boolean literals trigger E11061:
connect('db', 5432, true, false) // ERROR: ambiguous
THE FIX
Use named arguments (EK9 requires all-or-nothing naming):
connect(host: 'db', port: 5432, useSsl: true, autoReconnect: false)
See Q310 for code quality overview. See Q694 for named arguments.
Example
defines module qa.quality.boolean.args defines function configureNetwork() -> host as String useSsl as Boolean autoReconnect as Boolean stdout <- Stdout() stdout.println(`Host: ${host} SSL: ${useSsl} Reconnect: ${autoReconnect}`) defines program BooleanArgsDemo() stdout <- Stdout() // === CORRECT: named arguments for 2+ Booleans === configureNetwork(host: "db.example.com", useSsl: true, autoReconnect: false) // === CORRECT: single Boolean is fine positionally === stdout.println("Single Boolean: " + $true)
Common mistakes
E11061 — Two Boolean literals (true, false) as positional arguments are ambiguous. Use named arguments so the reader knows what each Boolean controls. See ek9 -h E11061 for details.
Incorrect:
configureNetwork("db.example.com", true, false)
Correct:
configureNetwork(host: "db.example.com", useSsl: true, autoReconnect: false)
Other ways to ask this
- What is E11061 BOOLEAN_ARGUMENTS_REQUIRE_NAMES?
- Why can't I pass two Boolean literals positionally in EK9?
- How do I fix Boolean argument naming errors in EK9?
Coming from another language?
Java: no enforcement — Boolean parameters are a known code smell. Python: no enforcement but PEP 8 recommends keyword args. Swift: requires argument labels by default. Kotlin: supports named args but doesn't require them. EK9: 2+ Boolean literals = compile error unless named.
Keywords: arguments, E11061, readability, quality, ambiguous, parameters, named, boolean