E08081: comparing a value to itself is always constant and indicates a logic error
What went wrong
You're comparing a variable to itself. The result is always constant (always true for ==, always false for <>, always 0 for <=>), which indicates a logic error — typically a typo in one of the operands.
Worked examples
Compilable examples demonstrating this error and the correct fix:
- ek9 -q 637 (How should I compare two similar variables to avoid self-...)
- ek9 -q 318 (How does EK9 detect self-assignment and self-comparison?)
How to fix it
- Check variable names for typos — one operand is probably wrong
- Replace one operand with the intended comparison target
- If the comparison is truly redundant, remove the condition entirely
Common causes
- Typo (wrong variable name on one side)
- Copy/paste error from duplicating an expression
- Refactoring that renamed one variable but not the other
See also
Examples
Every example is compiled by the EK9 compiler: the first fails exactly as captioned, the others fix it.
Fails with E08081: comparing a value to itself is always constant and indicates a logic error
#!ek9 defines module error.e08081.bad defines constant MAX_RETRIES <- 10 defines function checkEquality() -> amount as Integer <- result as Boolean? result: amount == amount checkNotEqual() -> amount as Integer <- result as Boolean? result: amount <> amount checkNotEqual2() -> amount as Integer <- result as Boolean? result: amount != amount checkLessThan() -> amount as Integer <- result as Boolean? result: amount < amount checkGreaterThan() -> amount as Integer <- result as Boolean? result: amount > amount checkLessEqual() -> amount as Integer <- result as Boolean? result: amount <= amount checkGreaterEqual() -> amount as Integer <- result as Boolean? result: amount >= amount checkComparator() -> amount as Integer <- result as Integer? result: amount <=> amount checkFuzzy() -> greeting as String <- result as Integer? result: greeting <~> greeting checkContains() -> greeting as String <- result as Boolean? result: greeting contains greeting checkConstantComparison() <- result as Boolean? result: MAX_RETRIES == MAX_RETRIES
Fixed: Compare two different values
#!ek9 defines module error.e08081.good defines function compareDifferentVars() -> first as Integer second as Integer <- result as Boolean? result: first == second compareDifferentStrings() -> firstName as String lastName as String <- result as Boolean? result: firstName <> lastName compareRelational() -> first as Integer second as Integer <- result as Boolean? result: first < second compareComparator() -> first as Integer second as Integer <- result as Integer? result: first <=> second compareFuzzy() -> firstName as String lastName as String <- result as Integer? result: firstName <~> lastName compareContains() -> sentence as String keyword as String <- result as Boolean? result: sentence contains keyword
Questions and answers
These Q&A entries show E08081 and its fix: