Learn Rust Coding · Lekcja

Wycinki

Pożyczone widoki

Lekcja 2 z 413 kroki

Wycinki to bezpłatna lekcja Learn Rust Coding na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn Rust Coding, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.

Czym jest wycinek?

Wycinek to pożyczony widok na spójną część kolekcji. Nie posiada danych — wskazuje na dane już istniejące.

Wycinki zapisuje się, umieszczając zakres w nawiasach kwadratowych.

fn main() {
    let arr = [1, 2, 3, 4, 5];
    let part = &arr[1..4];
    println!("{:?}", part);
}

Składnia zakresu wycinka

Zakresy wybierają indeks początkowy i końcowy. Koniec jest wyłączny.

  • &v[1..4] — indeksy 1, 2 i 3.
  • &v[..3] — od początku do indeksu 3.
  • &v[2..] — od indeksu 2 do końca.
fn main() {
    let v = vec![10, 20, 30, 40];
    println!("{:?}", &v[..2]);
    println!("{:?}", &v[2..]);
}

Wycinki napisów

Wycinek napisu &str jest widokiem na część wartości String. Zakresy indeksów określa się w bajtach.

fn main() {
    let s = String::from("hello world");
    let hello = &s[0..5];
    let world = &s[6..11];
    println!("{} {}", hello, world);
}

Wycinki całej kolekcji

Użyj &v[..], aby utworzyć wycinek obejmujący całą kolekcję. Tak wektor Vec jest pożyczany jako wycinek.

fn main() {
    let v = vec![1, 2, 3];
    let whole = &v[..];
    println!("{:?}", whole);
}

Wycinki jako parametry

Funkcje przyjmujące &[T] akceptują zarówno tablice, jak i wektory. Dzięki temu są elastyczne.

fn sum(items: &[i32]) -> i32 {
    let mut total = 0;
    for x in items {
        total += x;
    }
    total
}

fn main() {
    let v = vec![1, 2, 3];
    let a = [4, 5, 6];
    println!("{} {}", sum(&v), sum(&a));
}

Wycinki pożyczają, nie posiadają

Ponieważ wycinek pożycza dane, oryginalna kolekcja musi istnieć przez cały czas jego używania. Kompilator wymusza tę zasadę.

fn main() {
    let v = vec![100, 200, 300];
    let s = &v[0..2];
    println!("slice {:?}, original {:?}", s, v);
}

Długość wycinka

Podobnie jak inne kolekcje, wycinki mają metodę len(), która zwraca liczbę elementów objętych wycinkiem.

fn main() {
    let v = vec![5, 6, 7, 8, 9];
    let middle = &v[1..4];
    println!("length {}", middle.len());
}

first i last

Wycinki udostępniają metody first() i last(), zwracające wartości typu Option, dzięki czemu puste wycinki są bezpiecznie obsługiwane.

fn main() {
    let data = [10, 20, 30];
    let s = &data[..];
    println!("{:?} {:?}", s.first(), s.last());
}

Iterowanie po wycinku

Po wycinku można iterować tak samo jak po każdej kolekcji.

fn main() {
    let v = vec![1, 2, 3, 4];
    for x in &v[1..3] {
        println!("{}", x);
    }
}

Funkcja zwracająca pierwsze słowo

Częsty przypadek użycia wycinka: zwrócenie wycinka istniejącego tekstu, na przykład pierwszego słowa zdania.

fn first_word(s: &str) -> &str {
    let bytes = s.as_bytes();
    for (i, &b) in bytes.iter().enumerate() {
        if b == b' ' {
            return &s[0..i];
        }
    }
    s
}

fn main() {
    println!("{}", first_word("hello there"));
}

Dlaczego wycinki są bezpieczne

Wycinki pozwalają uniknąć kopiowania danych, jednocześnie zapobiegając powstawaniu wiszących referencji. Pożyczający sprawdza, czy dane źródłowe istnieją dłużej niż wycinek.

fn main() {
    let words = vec!["a", "b", "c", "d"];
    let pair = &words[1..3];
    println!("{:?}", pair);
}

Szybkie sprawdzenie

Przypomnij sobie, co reprezentuje wycinek.

Podsumowanie

Wycinki w Rust:

  • Pożyczony widok: &v[start..end], z wyłącznym końcem zakresu.
  • &str to wycinek napisu, a &[T] to wycinek tablicy lub wektora.
  • Parametry typu wycinka akceptują zarówno tablice, jak i wektory.
  • Pożyczający zapewnia bezpieczeństwo wycinków.
fn average(nums: &[i32]) -> i32 {
    nums.iter().sum::<i32>() / nums.len() as i32
}

fn main() {
    let v = vec![4, 8, 12];
    println!("{}", average(&v[..]));
}
Bezpłatny start

Ucz się Rust dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
39
Lekcje
144

Często zadawane pytania

Czy lekcja „Wycinki” jest bezpłatna?

Tak — pełny tekst „Wycinki” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn Rust Coding, przejdź na CoddyKit PRO. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.

Co nauczysz się w „Wycinki”?

Pożyczone widoki Ćwiczysz Learn Rust Coding z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Learn Rust Coding?

Nie wymagamy żadnego doświadczenia. Learn Rust Coding w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Wycinki”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Learn Rust Coding?

Tak. Każda lekcja Learn Rust Coding zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. String a &str
  2. Wycinki
  3. Metody String
  4. UTF-8 i znaki
← Powrót do Learn Rust Coding