Direct naar de hoofdinhoud
Module 4 · Les 1 van 27/14 in de cursus~12 min
Modulelessen (1/2)

Structuren definiëren en instantiëren

Structs (of structuren) in Rust zijn aangepaste gegevenstypen waarmee u meerdere gerelateerde waarden kunt groeperen. Ze lijken op objecten of klassen in andere talen, maar zonder overerving.

Een structuur definiëren

Om een ​​structuur te definiëren, gebruiken we het trefwoord struct gevolgd door de naam in PascalCase. Binnenin definiëren we de namen en typen van de velden:

Rust
struct User {
    username: String,
    email: String,
    active: bool,
    sign_in_count: u64,
}

Een exemplaar maken

Om een ​​struct te gebruiken, moeten we een instantie maken door alle opgegeven velden in te vullen:

Rust
fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    // Access fields using dot notation
    println!("Is user {} active? {}", user1.username, user1.active);
}

Structurele veranderlijkheid

In Rust moet de gehele instantie worden gemarkeerd als veranderlijk (mut) als u een van de velden ervan wilt wijzigen. Rust staat niet toe dat alleen bepaalde velden als veranderlijk worden gemarkeerd:

Rust
fn main() {
    let mut user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    user1.active = false; // Valid because user1 is mutable!
}

Tuple-structuren en eenheidachtige structuren

Rust ondersteunt ook twee andere struct-formaten naast de klassieke benoemde veld-structs:

  1. Tupelstructuren: ze hebben een bijbehorende naam, maar de velden hebben geen individuele namen, alleen typen. Ze zijn nuttig voor het definiëren en differentiëren van specifieke typen:
    Rust
    struct Point(i32, i32, i32);
    let origin = Point(0, 0, 0);
  2. Unitachtige structuren: ze definiëren geen velden. Ze gedragen zich als het eenheidstype (). Ze zijn handig wanneer u gedrag (eigenschappen) op een type moet implementeren zonder er gegevens in op te slaan.

Probeer het zelf

Oefening#rust.m4.l1.e1
Pogingen: 0Laden…

Definieer de gebruikersstructuur boven de hoofdstructuur met de velden: gebruikersnaam (tekenreekstype) en actief (booltype).

Editor laden…
Toon hint

Schrijf `struct User { gebruikersnaam: String, active: bool }`before`main`.

Oplossing beschikbaar na 3 pogingen

Oefening#rust.m4.l1.e2
Pogingen: 0Laden…

Wijzig user1 om het veranderlijk te maken (laat user1 mut) en verander het actieve veld in false voordat u afdrukt.

Editor laden…
Toon hint

Voeg `mut`to`let user1` toe om het`let mut user1`te maken, en voeg vervolgens`user1.active = false;` in.

Oplossing beschikbaar na 3 pogingen

Oefening#rust.m4.l1.e3
Pogingen: 0Laden…

Definieer een tupelstructuur met de naam Color die drie i32-velden bevat. In het algemeen instantiëert u Kleur met de waarden 255, 0 en 100, waarbij u het toewijst aan de variabele my_color, en drukt u vervolgens het eerste element (rode waarde) af met println!.

Editor laden…
Toon hint

Definieer de tuple-structuur met `struct Color(i32, i32, i32);`. In het algemeen instantiëer je het als `let my_color = Color(255, 0, 100);`en druk je de rode waarde af met `my_color.0`.

Oplossing beschikbaar na 3 pogingen