Why does EK9 require named arguments when passing multiple Boolean literals?
← Code Quality · Ref: Q799
When a call passes two or more Boolean literal values (true/false) as positional arguments, EK9 raises E11061. Boolean literals carry zero semantic signal at a call site.
WHY AMBIGUOUS
connect(true, false) What does each Boolean mean? connect(true, true) Completely opaque without checking the signature
SINGLE BOOLEAN OK
setVisible(true) Clear from context - one Boolean is tolerable
FIX: USE NAMED ARGUMENTS
connect(useSsl: true, autoReconnect: false) When naming any argument, EK9 requires ALL arguments to be named.
See Q777 for discarded operator returns. See Q310 for code quality overview.
Example
defines module qa.codequality.booleanargs defines function configureNetwork() -> hostName as String useSsl as Boolean autoReconnect as Boolean <- summary as String: String() sslLabel <- "no-ssl" if useSsl sslLabel: "ssl" reconnectLabel <- "no-reconnect" if autoReconnect reconnectLabel: "reconnect" summary: `${hostName} [${sslLabel}, ${reconnectLabel}]` defines program BooleanArgDemo() stdout <- Stdout() networkInfo <- configureNetwork(hostName: "db.example.com", useSsl: true, autoReconnect: false) stdout.println(networkInfo)
Common mistakes
E11061 — Passing two Boolean literals as positional arguments is ambiguous - the reader cannot tell what 'true, false' means without checking the function signature. Use named arguments for clarity. See ek9 -h E11061 for details.
Incorrect:
configureNetwork("db.example.com", true, false)
Correct:
configureNetwork(hostName: "db.example.com", useSsl: true, autoReconnect: false)
Other ways to ask this
- What triggers E11061 boolean arguments require names?
- Why does 'connect(true, false)' fail to compile?
- How do I pass multiple Boolean parameters in EK9?
Coming from another language?
Java: silently allows positional Boolean arguments. Python: allows but style guides recommend kwargs. Swift: requires argument labels by default. Rust: no named arguments (use builder pattern). Kotlin: supports named arguments but doesn't require them. Go: no named arguments. EK9: compile-time error when 2+ Boolean literals appear as positional arguments.
Keywords: readability, call, E11061, positional, ambiguous, boolean, argument, site, named