Tuples and Arrays

Tuples and arrays are the first "compound" types we have seen. All elements of an array have the same type, while tuples can accommodate different types. Both types have a size fixed at compile time.

TypesLiterals
Arrays[T; N][20, 30, 40], [0; 3]
Tupel(), (T,), (T1, T2), ...(), ('x',), ('x', 1.2), ...

Array-Zuordnung und Zugriff:

fn main() {
    let mut a: [i8; 10] = [42; 10];
    a[5] = 0;
    println!("a: {a:?}");
}

Tupel-Zuweisung und Zugriff:

fn main() {
    let t: (i8, bool) = (7, true);
    println!("t.0: {}", t.0);
    println!("t.1: {}", t.1);
}
This slide should take about 10 minutes.

SchlĂŒsselpunkte:

Arrays:

  • A value of the array type [T; N] holds N (a compile-time constant) elements of the same type T. Note that the length of the array is part of its type, which means that [u8; 3] and [u8; 4] are considered two different types. Slices, which have a size determined at runtime, are covered later.

  • Try accessing an out-of-bounds array element. Array accesses are checked at runtime. Rust can usually optimize these checks away, and they can be avoided using unsafe Rust.

  • Wir können Literale verwenden, um Arrays Werte zuzuweisen.

  • The println! macro asks for the debug implementation with the ? format parameter: {} gives the default output, {:?} gives the debug output. Types such as integers and strings implement the default output, but arrays only implement the debug output. This means that we must use debug output here.

  • Das HinzufĂŒgen von #, z. B. {a:#?}, ruft ein „hĂŒbsches Druckformat“ (pretty print) auf, das einfacher zu lesen ist.

Tupel:

  • Wie Arrays haben Tupel eine feste LĂ€nge.

  • Tupel gruppieren Werte unterschiedlicher Typen zu einem zusammengesetzten Typ.

  • Auf Felder eines Tupels kann durch einen Punkt gefolgt von dem Index des Werts zugegriffen werden, z. B. „t.0“, „t.1“.

  • The empty tuple () is also known as the "unit type". It is both a type, and the only valid value of that type --- that is to say both the type and its value are expressed as (). It is used to indicate, for example, that a function or expression has no return value, as we'll see in a future slide.

    • You can think of it as void that can be familiar to you from other programming languages.