length: int- Module
- Collections →
- Receiver
- Array<T>
- Minimum arity
- 0
- Maximum arity
- 0
Declaration and parameters
Availability
Included by default · yes
These types are provided by the language. No module import is required.
The declarations below describe the standard operations on built-in values.
Receiver
Array<T>
Parameter constraints
Array<T>.get(i: int) returns Option<T>. An index from zero to one less than the length returns Some with that element. A negative index or an index at or past the length returns None().
get never faults for its index. Use values[i] when an index outside the array is a program error. That expression faults under the access rule.
The length property returns the number of elements as int. An empty array has length 0.
Array<T>.push(x: T) returns unit. It appends x after the last element and increases the length by one. Earlier elements keep their positions.
Push writes to the array value. The receiver must be rooted in a let mut binding. Other array values are unchanged under collection value semantics.
Result
The declared result type is int.
Effects
Failures
Result and effects
Select this field from a value of its named type without call parentheses.
An empty array has length 0.
Related entries
Read, count and append array elements
Read, count and append array elements
Array<T>.get(i: int) returns Option<T>. An index from zero to one less than the length returns Some with that element. A negative index or an index at or past the length returns None().
get never faults for its index. Use values[i] when an index outside the array is a program error. That expression faults under the access rule.
The length property returns the number of elements as int. An empty array has length 0.
Array<T>.push(x: T) returns unit. It appends x after the last element and increases the length by one. Earlier elements keep their positions.
Push writes to the array value. The receiver must be rooted in a let mut binding. Other array values are unchanged under collection value semantics.
Why
A lookup that may miss returns its absence as a value, so reads of neighbors at the edges of a sequence need no separate bounds test. Indexing keeps its fault for indexes that a correct program never produces. The two intents keep two spellings. push builds a sequence in order without rebuilding it.
Read elements without faulting at the edges
import std.iolet names = ["a", "b", "c"]for index in ([-1, 0, 2, 3]) {match (names.get(index)) {case Some(name) => io.writeLine("{index}: {name}")case None() => io.writeLine("{index}: none")}}let empty: Array<string> = []io.writeLine("{empty.length}: {empty.get(0) ?? "none"}")
-1: none
0: a
2: c
3: none
0: none
Expected result
Expected result
Execution completes. Exit code 0.
-1: none0: a2: c3: none0: none
Append elements to a mutable array
import std.iolet mut names: Array<string> = []io.writeLine("{names.length}")names.push("a")names.push("b")io.writeLine("{names.length}: {names.join(",")}")
0
2: a,b
Expected result
Expected result
Execution completes. Exit code 0.
02: a,b