Przejdź do głównej treści
eLearner.app
Moduł 4 · Lekcja 1 z 27/14 w kursie~12 min
Lekcje modułu (1/2)

Definiowanie i tworzenie struktur

Struktury (struct) w języku Rust są niestandardowymi typami danych, które pozwalają na grupowanie wielu powiązanych wartości. Są one podobne do obiektów lub klas w innych językach, ale nie obsługują dziedziczenia.

Definiowanie struktury (Struct)

Aby zdefiniować strukturę, używamy słowa kluczowego struct, po którym następuje nazwa zapisana w formacie PascalCase. Wewnątrz definiujemy nazwy i typy pól:

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

Tworzenie instancji

Aby użyć struktury, musimy utworzyć jej instancję, uzupełniając wszystkie określone pola:

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

    // Accesso ai campi tramite notazione con punto
    println!("L'utente {} è attivo? {}", user1.username, user1.active);
}

Modyfikowalność (Mutabilità) struktur

W języku Rust cała instancja musi być oznaczona jako modyfikowalna (mut), jeśli chcesz zmodyfikować którekolwiek z jej pól. Rust nie pozwala na oznaczanie jako modyfikowalne tylko wybranych pól:

Code
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; // Valido perché user1 è mutabile!
}

Struktury krotkowe (Tuple Structs) i puste struktury (Unit-Like Structs)

Rust oprócz klasycznych struktur z nazwanymi polami obsługuje dwa inne formaty struktur:

  1. Struktury krotkowe (Tuple Structs): Posiadają przypisaną nazwę, ale ich pola nie mają indywidualnych nazw, a jedynie określone typy. Są przydatne do definiowania i rozróżniania określonych typów:
    Code
    struct Point(i32, i32, i32);
    let origin = Point(0, 0, 0);
    
  2. Puste struktury (Unit-Like Structs): Nie definiują żadnych pól. Zachowują się jak typ (). Są przydatne, gdy zachodzi potrzeba zaimplementowania określonych zachowań (trait) na typie bez zapisywania w nim danych.

Spróbuj sam

Ćwiczenie#rust.m4.l1.e1
Próby: 0Ładowanie...

Zdefiniuj strukturę User nad funkcją main z polami: username (typu String) oraz active (typu bool).

Ładowanie edytora...
Pokaż wskazówkę

Zapisz `struct User { username: String, active: bool }`przed funkcją`main`.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#rust.m4.l1.e2
Próby: 0Ładowanie...

Zmodyfikuj zmienną user1 czyniąc ją modyfikowalną (let mut user1) i zmień wartość pola active na false przed jej wypisaniem.

Ładowanie edytora...
Pokaż wskazówkę

Dodaj `mut`do`let user1`tak, by powstało`let mut user1`, a następnie wstaw `user1.active = false;`.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#rust.m4.l1.e3
Próby: 0Ładowanie...

Zdefiniuj strukturę krotkową (tuple struct) o nazwie Color zawierającą trzy pola typu całkowitego i32. W funkcji main utwórz instancję Color z wartościami 255, 0 i 100 przypisując ją do zmiennej my_color, a następnie wypisz jej pierwszy element (wartość koloru czerwonego) za pomocą println!.

Ładowanie edytora...
Pokaż wskazówkę

Zdefiniuj strukturę krotkową za pomocą `struct Color(i32, i32, i32);`. W main utwórz jej instancję jako `let my_color = Color(255, 0, 100);`i wypisz wartość koloru czerwonego za pomocą`my_color.0`.

Rozwiązanie dostępne po 3 próbach