How do I compare two timeout values in milliseconds in EK9?
← Operators and Expressions · Ref: Q1194
EK9 Millisecond is a built-in type with literal syntax and full operator support.
MILLISECOND LITERALS
shortTimeout <- 250ms longTimeout <- 5000ms
COMPARISON
if shortTimeout < longTimeout shorter timeout ordering <- shortTimeout <=> longTimeout
COALESCING
quickest <- shortTimeout <? longTimeout returns the shorter slowest <- shortTimeout >? longTimeout returns the longer
Millisecond supports the same operator set as Duration, Date, Integer — EK9's type system is consistent.
See Q542 for temporal comparison. See Q243 for coalescing operators.
Example
defines module qa.operators.millisecondcompare defines function <?- Compare two millisecond values and return spaceship ordering. -?> compareMs() as pure -> left as Millisecond right as Millisecond <- rtn as Integer: left <=> right <?- Check if the first timeout is shorter than the second. -?> isShorter() as pure -> left as Millisecond right as Millisecond <- rtn as Boolean: left < right <?- Return the quicker of two timeouts using coalescing min. -?> quickerOf() as pure -> left as Millisecond right as Millisecond <- rtn as Millisecond: left <? right <?- Return the slower of two timeouts using coalescing max. -?> slowerOf() as pure -> left as Millisecond right as Millisecond <- rtn as Millisecond: left >? right defines program MillisecondCompareDemo() stdout <- Stdout() // === MILLISECOND LITERALS === shortTimeout <- 250ms longTimeout <- 5000ms mediumTimeout <- 1500ms // === COMPARISON VIA FUNCTION === shorter <- isShorter(shortTimeout, longTimeout) stdout.println(`Short is faster: ${shorter}`) // === SPACESHIP ORDERING VIA FUNCTION === ordering <- compareMs(shortTimeout, longTimeout) stdout.println(`Short <=> Long: ${ordering}`) mediumOrder <- compareMs(mediumTimeout, longTimeout) stdout.println(`Medium <=> Long: ${mediumOrder}`) // === COALESCING: FIND QUICKEST AND SLOWEST === quickest <- quickerOf(shortTimeout, longTimeout) slowest <- slowerOf(shortTimeout, longTimeout) stdout.println(`Quickest: ${quickest}`) stdout.println(`Slowest: ${slowest}`) // === SORTED TIMEOUT LIST VIA STREAM === timeouts <- List() of Millisecond timeouts += longTimeout timeouts += shortTimeout timeouts += mediumTimeout sorted <- cat timeouts | sort | collect as List of Millisecond stdout.println(`Sorted timeouts: ${sorted}`) // === STRING AND ISSET === msStr <- $shortTimeout stdout.println(`Timeout as string: ${msStr}`) require shortTimeout? unsetMs <- Millisecond() require ~unsetMs? // === COPY OPERATOR === backup <- 0ms backup :=: shortTimeout stdout.println(`Copied timeout: ${backup}`)
Common mistakes
E50060 — Millisecond values are already in milliseconds and support comparison operators directly — there is no 'toMillis()' method to resolve. See ek9 -h E50060 for details.
Incorrect:
left.toMillis() < right.toMillis()
Correct:
left < right
Other ways to ask this
- Compare Millisecond values to determine which timeout is shorter.
- I need to select the shorter of two network timeouts.
- In Java I compared long millisecond values — how does EK9 handle this?
Coming from another language?
Java: plain long for millis, System.currentTimeMillis(), no type safety. Python: float seconds, no millis type. Rust: Duration::from_millis(). Go: time.Duration(n * time.Millisecond). EK9: 250ms literals, direct comparison, type-safe millisecond operations.
Keywords: timeout, duration, shorter, millisecond, longer, compare, operator, latency, ms, network