type

Range

src @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

fromStr

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

make

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

makeExclusive

Convenience for make(start, end, true).

makeInclusive

Convenience for make(start, end, false).

methods

contains

Return if this range contains the specified integer.

each

Call the specified function for each integer in the range.

eachWhile

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

end

Return end index.

equals

Return true if same start, end, and exclusive.

exclusive

Is the end index exclusive.

first

Get the first value of the range.

hash

Return start ^ end.

inclusive

Is the end index inclusive.

isEmpty

Return if this range contains no integer values.

last

Get the last value of the range.

map

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

max

Get the maximum value of the range.

min

Get the minimum value of the range.

offset

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

random

Convenience for Int.random(this).

start

Return start index.

toList

Convert this range into a list of Ints.

toStr

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

Slot Details

contains

src Bool contains(Int i)

Return if this range contains the specified integer.

Example:

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

each

src 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

src 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

src Int end()

Return end index.

Example:

(1..3).end  =>  3

equals

src virtual override Bool equals(Obj? obj)

Return true if same start, end, and exclusive.

exclusive

src Bool exclusive()

Is the end index exclusive.

Example:

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

first

src Int? first()

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

fromStr

src static new fromStr(Str s, Bool checked := true)

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

src virtual override Int hash()

Return start ^ end.

inclusive

src Bool inclusive()

Is the end index inclusive.

Example:

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

isEmpty

src Bool isEmpty()

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

last

src Int? last()

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

make

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

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

makeExclusive

src new makeExclusive(Int start, Int end)

Convenience for make(start, end, true).

makeInclusive

src new makeInclusive(Int start, Int end)

Convenience for make(start, end, false).

map

src 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

src Int? max()

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

min

src Int? min()

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

offset

src 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

src Int random()

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

start

src Int start()

Return start index.

Example:

(1..3).start  =>  1

toList

src 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

src virtual override Str toStr()

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