Extract magic literals in comparisons into named constants to satisfy the compiler.
← Operators and Expressions · Ref: Q1184
Name all literals used in comparisons:
expensiveThreshold <- 50.0 if price > expensiveThreshold stdout.println("Expensive")
EK9 rejects 'price > 50.0' with E11064 — magic literals in comparisons must be named. This improves readability and makes intent explicit.
See Q238 for operator set. See Q240 for arithmetic operators.
Example
#!ek9 defines module qa.operators.namedconstantsrequired defines function isExpensive() -> price as Float <- rtn as Boolean: false //Named constant — compiler accepts this expensiveThreshold <- 50.0 rtn: price > expensiveThreshold isLongString() -> item as String <- rtn as Boolean: false //Named constant for string length comparison minLength <- 5 rtn: length item > minLength defines program NamedConstantsRequiredDemo() stdout <- Stdout() //Use named constants in comparisons price <- 75.0 stdout.println(`Expensive: ${isExpensive(price)}`) cheapPrice <- 10.0 stdout.println(`Expensive: ${isExpensive(cheapPrice)}`) longWord <- "International" stdout.println(`Long: ${isLongString(longWord)}`) shortWord <- "Hi" stdout.println(`Long: ${isLongString(shortWord)}`)
Common mistakes
E11064 — EK9 rejects magic literals in comparisons. Extract 50.0 into a named variable like expensiveThreshold.
Incorrect:
rtn: price > 50.0
Correct:
expensiveThreshold <- 50.0 rtn: price > expensiveThreshold
Other ways to ask this
- Write code that avoids magic numbers in comparisons by using named variables
- I keep getting E11064 when comparing against literal values in EK9
- In Java I'd use static final for magic numbers. What is the EK9 pattern for named constants?
- Fix a comparison that uses a bare literal by extracting it into a named constant
Coming from another language?
Java: private static final double THRESHOLD = 50.0. Python: THRESHOLD = 50.0 (convention). Go: const threshold = 50.0. EK9: threshold <- 50.0 (compiler-enforced naming).
Keywords: E11064, comparison, constant, literal, magic, named, threshold