Salt la conținutul principal
Modulul 4 · Lecția 1 din 27/14 în curs~12 min
Lecții din modul (1/2)

Definirea și instanțierea structurilor

Structurile (sau structuri) în Rust sunt tipuri de date personalizate care vă permit să grupați mai multe valori asociate împreună. Sunt similare cu obiectele sau clasele din alte limbi, dar fără moștenire.

Definirea unui Struct

Pentru a defini o structură, folosim cuvântul cheie struct urmat de numele din PascalCase. În interior, definim numele și tipurile câmpurilor:

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

Crearea unei Instanțe

Pentru a folosi o structură, trebuie să creăm o instanță completând toate câmpurile specificate:

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);
}

Mutabilitatea structurii

În Rust, întreaga instanță trebuie să fie marcată ca mutabilă (mut) dacă doriți să modificați oricare dintre câmpurile sale. Rust nu permite marcarea doar anumitor câmpuri ca mutabile:

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!
}

Structuri tuple și structuri asemănătoare unității

Rust acceptă, de asemenea, alte două formate de struct, în afară de structurile clasice cu câmpuri numite:

  1. Tuple Structs: au un nume asociat, dar câmpurile nu au nume individuale, ci doar tipuri. Sunt utile pentru definirea și diferențierea unor tipuri specifice:
    Rust
    struct Point(i32, i32, i32);
    let origin = Point(0, 0, 0);
  2. Structuri asemănătoare unităților: nu definesc niciun câmp. Se comportă ca tipul de unitate (). Sunt utile atunci când trebuie să implementați comportamente (trăsături) pe un tip fără a stoca date în el.

Încercați-l singur

Exercițiu#rust.m4.l1.e1
Încercări: 0Se încarcă…

Definiți structura User de mai sus principal cu câmpurile: nume de utilizator (tip șir) și activ (tip bool).

Se încarcă editorul...
Afișează indiciu

Scrieți `struct User { nume de utilizator: String, active: bool }`before`main`.

Soluție disponibilă după 3 încercări

Exercițiu#rust.m4.l1.e2
Încercări: 0Se încarcă…

Modificați user1 pentru a-l face mutabil (lasă mut user1) și schimbați câmpul activ la false înainte de imprimare.

Se încarcă editorul...
Afișează indiciu

Adăugați `mut`la`let user1`pentru a face`let mut user1`, apoi introduceți `user1.active = false;`.

Soluție disponibilă după 3 încercări

Exercițiu#rust.m4.l1.e3
Încercări: 0Se încarcă…

Definiți o structură tuplu numită Color care conține trei câmpuri i32. În principal, instanțiați Color cu valorile 255, 0 și 100, atribuind-o variabilei my_color, apoi imprimați primul său element (valoarea roșie) folosind println!.

Se încarcă editorul...
Afișează indiciu

Definiți structura tuplu cu `struct Color(i32, i32, i32);`. În principal, instanțiază-l ca `let my_color = Color(255, 0, 100);` și imprimă valoarea roșie cu`my_color.0`.

Soluție disponibilă după 3 încercări