Lekcje modułu (2/2)
Typy proste
Rust jest językiem o statycznym typowaniu, co oznacza, że musi znać typ wszystkich zmiennych w momencie kompilacji. Zazwyczaj kompilator potrafi wywnioskować typ na podstawie przypisanej wartości, ale czasami konieczne lub przydatne jest określenie go ręcznie.
Typy pierwotne (primitivi) w Rust dzielą się na dwie główne kategorie: skalarne (pojedyncza wartość) i złożone (grupa wartości).
Typy Skalarne
Typy skalarne reprezentują pojedynczą wartość. Rust ma cztery podstawowe:
- Liczby całkowite (integers): Liczby bez przecinka. Mogą być ze znakiem (
i8,i16,i32,i64,i128,isize) lub bez znaku (u8,u16,u32,u64,u128,usize). Domyślnym typem jesti32. - Liczby zmiennoprzecinkowe (floats): Liczby z przecinkiem. Mogą to być
f32lubf64(podwójna precyzja, domyślna). - Wartości logiczne (booleans): Reprezentują prawdę lub fałsz za pomocą
truelubfalse(typbool). - Znaki (characters): Pojedynczy znak Unicode ujęty w pojedynczy cudzysłów (typ
char), np.'a','ℤ'lub emoji'😻'.
Przykład jawnej adnotacji typu:
let x: i64 = 42;
let y: f64 = 3.1415;
let is_rust_awesome: bool = true;
let heart_emoji: char = '❤';
Typy Złożone
Typy złożone mogą grupować wiele wartości w jeden typ. Rust ma dwa główne typy złożone:
Krotki (Tuples)
Krotka grupuje wartości różnych typów w kolekcję o stałym rozmiarze:
let person: (String, i32) = (String::from("Alice"), 30);
// Destrutturazione per estrarre valori
let (name, age) = person;
// Accesso diretto con l'indice usando il punto (.)
let name_direct = person.0;
let age_direct = person.1;
Tablice (Arrays - wektory o stałym rozmiarze)
Tablica grupuje wiele elementów tego samego typu w kolekcję o stałym rozmiarze przechowywaną na stosie (stack):
let numbers = [1, 2, 3, 4, 5]; // Rilevato come [i32; 5]
let first = numbers[0]; // Accesso per indice
let third = numbers[2];
Jeśli spróbujesz uzyskać dostęp do indeksu spoza granic tablicy (np. numbers[10]), Rust natychmiast przerwie wykonywanie programu (panika) w czasie wykonywania, zamiast pozwolić na nieautoryzowany dostęp do pamięci.
Porównanie krotek i tablic
| Cecha | Krotka (Tuple) | Tablica (Array) |
|---|---|---|
| Typ elementów | Mogą być różne | Muszą być takie same |
| Rozmiar | Stały | Stały |
| Dostęp | Za pomocą kropki (.0, .1) | Za pomocą indeksu ([0]) |
Spróbuj sam
Zadeklaruj krotkę o nazwie stats zawierającą wiek 30 (liczba całkowita) i wynik 95.5 (liczba zmiennoprzecinkowa). Następnie wypisz na ekranie wynik, uzyskując dostęp bezpośrednio do drugiego elementu krotki za pomocą indeksu.
Pokaż wskazówkę
Utwórz krotkę za pomocą `let stats = (30, 95.5);`. Uzyskaj dostęp do drugiego elementu za pomocą `stats.1` wewnątrz makra `println!`.
Rozwiązanie dostępne po 3 próbach
Zadeklaruj tablicę o nazwie numbers zawierającą wartości całkowite od 1 do 5. Wypisz na ekranie trzeci element tablicy (indeks 2) za pomocą println!.
Pokaż wskazówkę
Zadeklaruj tablicę za pomocą `let numbers = [1, 2, 3, 4, 5];` i uzyskaj dostęp do trzeciego elementu indeksując go za pomocą `[2]`.
Rozwiązanie dostępne po 3 próbach
Mając daną krotkę `let point = (10, 20);`, użyj destrukturyzacji do wyodrębnienia wartości do dwóch zmiennych o nazwach `x` i `y`. Następnie wypisz sumę `x` i `y`.
Pokaż wskazówkę
Użyj składni `let (x, y) = point;` do destrukturyzacji krotki, a następnie zsumuj zmienne w `println!`.
Rozwiązanie dostępne po 3 próbach