E11051: pure method/function returns a value but result is discarded - a pure call with no side effects achieves nothing
What went wrong
A pure method or function was called as a standalone statement, but its non-Void return value is discarded. A pure method has NO side effects — the return value is the ONLY reason to call it. This call achieves nothing.
Worked examples
Compilable examples demonstrating this error and the correct fix:
- ek9 -q 732 (Why must every constructor, operator, and pure function r...)
- ek9 -q 777 (Why does EK9 reject discarded operator return values?)
Rationale
The 'as pure' modifier guarantees no mutation, no I/O, no state changes. If the return value is also discarded, the call has zero observable effect. This is always dead code — there is no scenario where this is intentional.
How to fix it
- Assign the result: total <- calculateTotal(items)
- Use in an expression: if inventory.contains(item)
- Use in a guard: if found <- registry.find(userId)
See also
Examples
Every example is compiled by the EK9 compiler: the first fails exactly as captioned, the others fix it.
Fails with E11051: pure method/function returns a value but result is discarded - a pure call with no side effects achieves nothing
#!ek9 defines module error.e11051.bad defines class Calculator add() as pure -> operand as Integer <- result as Integer: operand + 1 TestClass testDiscardedPureMethodCall() calc <- Calculator() calc.add(10) defines function pureCompute() as pure -> input as Integer <- result as Integer: input * 2 testDiscardedPureFunctionCall() pureCompute(42)
Fixed: Use the result - discarding is only for a call made for its side effect
#!ek9 defines module error.e11051.good defines function voidFunction() Stdout().println("side effect") impureCompute() <- result as Integer: 42 testVoidCallIsOk() voidFunction() testNonPureCallIsOk() impureCompute() testAssignedReturnIsOk() result <- impureCompute() Stdout().println($result) testMutatingOperatorIsOk() counter <- 0 counter++ counter += 5 Stdout().println($counter) testStdoutIsOk() Stdout().println("This is fine")
Questions and answers
These Q&A entries show E11051 and its fix: