class

Range

@Serializable { simple=true }
const class Range : Obj

Range represents a contiguous range of integers from start to end. Ranges may be represented as literals in Fantom source code as "start..end" for an inclusive end or "start..<end" for an exclusive range.

constructors makeExclusive

Convenience for make(start, end, true)

fromStr

Parse from string format - inclusive is "start..end", or exclusive is "start..<end"

makeInclusive

Convenience for make(start, end, false)

make

Constructor with start, end, and exclusive flag (all must be non-null)

methods toStr

If inclusive return "start..end", if exclusive return "start..<end"

inclusive

Is the end index inclusive

last

Get the last value of the range

offset

Create a new range by adding offset to this range's start and end values

max

Get the maximum value of the range

isEmpty

Return if this range contains no integer values

start

Return start index

toList

Convert this range into a list of Ints

each

Call the specified function for each integer in the range

random

Convenience for Int.random(this)

contains

Return if this range contains the specified integer

min

Get the minimum value of the range

equals

Return true if same start, end, and exclusive

exclusive

Is the end index exclusive

end

Return end index

eachWhile

Iterate every integer in the range until the function returns non-null

map

Create a new list which is the result of calling c for every integer in the range

first

Get the first value of the range

hash

Return start ^ end

contains Bool contains(Int i)

Return if this range contains the specified integer.

Example:

(1..3).contains(2)  =>  true
(1..3).contains(4)  =>  false

each Void each(|Int| c)

Call the specified function for each integer in the range. Also see Int.times.

Example:

(1..3).each |i| { echo(i) }          =>  1, 2, 3
(1..<3).each |i| { echo(i) }         => 1, 2
('a'..'z').each |Int i| { echo(i) }  => 'a', 'b', ... 'z'

eachWhile Obj? eachWhile(|Int->Obj?| c)

Iterate every integer in the range until the function returns non-null. If function returns non-null, then break the iteration and return the resulting object. Return null if the function returns null for every integer in the range.

end Int end()

Return end index.

Example:

(1..3).end  =>  3

equals virtual Bool equals(Obj? obj)

Return true if same start, end, and exclusive.

exclusive Bool exclusive()

Is the end index exclusive.

Example:

(1..3).exclusive   =>  false
(1..<3).exclusive  =>  true

first Int? first()

Get the first value of the range. If range contains no values then return null. Equivalent to toList.first.

fromStr static new fromStr(Str s, Bool checked)

Parse from string format - inclusive is "start..end", or exclusive is "start..<end". If invalid format then throw ParseErr or return null based on checked flag.

hash virtual Int hash()

Return start ^ end.

inclusive Bool inclusive()

Is the end index inclusive.

Example:

(1..3).inclusive   =>  true
(1..<3).inclusive  =>  false

isEmpty Bool isEmpty()

Return if this range contains no integer values. Equivalent to toList.isEmpty.

last Int? last()

Get the last value of the range. If range contains no values then return null. Equivalent to toList.last.

make new make(Int start, Int end, Bool exclusive)

Constructor with start, end, and exclusive flag (all must be non-null).

makeExclusive new makeExclusive(Int start, Int end)

Convenience for make(start, end, true).

makeInclusive new makeInclusive(Int start, Int end)

Convenience for make(start, end, false).

map Obj?[] map(|Int->Obj?| c)

Create a new list which is the result of calling c for every integer in the range. The new list is typed based on the return type of c.

Example:

(10..15).map |i->Str| { i.toHex }  =>  Str[a, b, c, d, e, f]

max Int? max()

Get the maximum value of the range. If range contains no values then return null. Equivalent to toList.max.

min Int? min()

Get the minimum value of the range. If range contains no values then return null. Equivalent to toList.min.

offset Range offset(Int offset)

Create a new range by adding offset to this range's start and end values.

Example:

(3..5).offset(2)   =>  5..7
(3..<5).offset(-2) =>  1..<3

random Int random()

Convenience for Int.random(this). Also see Int.random, Float.random, List.random, and Random.

start Int start()

Return start index.

Example:

(1..3).start  =>  1

toList Int[] toList()

Convert this range into a list of Ints.

Example:

(2..4).toList   =>  [2,3,4]
(2..<4).toList  =>  [2,3]
(10..8).toList  =>  [10,9,8]

toStr virtual Str toStr()

If inclusive return "start..end", if exclusive return "start..<end".

Haxall 4.0.5 ∙ 24-Feb-2026 14:33 EST