Modulelessen (2/2)
Primitieve typen
Rust is een statisch getypeerde taal, wat betekent dat het tijdens het compileren het type van alle variabelen moet kennen. Normaal gesproken kan de compiler het type afleiden op basis van de toegewezen waarde, maar soms is het nodig of nuttig om dit handmatig op te geven.
Primitieve typen in Rust zijn onderverdeeld in twee hoofdcategorieën: scalaren (enkele waarde) en verbindingen (groep waarden).
Scalaire typen
Scalaire typen vertegenwoordigen één enkele waarde. Rust heeft vier fundamentele scalaire typen:
- Gehele getallen: hele getallen. Ze kunnen ondertekend zijn (
i8,i16,i32,i64,i128,isize) of niet-ondertekend (u8,u16,u32,u64,u128,usize). Het standaardtype isi32. - Zwevende komma: getallen met decimalen. Ze kunnen
f32off64zijn (dubbele precisie, standaard). - Booleans: vertegenwoordigt de logische waarheid met
trueoffalse(typebool). - Tekens: een enkele scalaire Unicode-waarde tussen enkele aanhalingstekens (type
char), bijvoorbeeld'a','ℤ'of emoji'😻'.
Voorbeeld van expliciete typeannotatie:
let x: i64 = 42;
let y: f64 = 3.1415;
let is_rust_awesome: bool = true;
let heart_emoji: char = '❤';Samengestelde typen
Samengestelde typen kunnen meerdere waarden in één type groeperen. Roest heeft twee belangrijke soorten primitieve verbindingen:
Tupels
Een tuple groepeert waarden van verschillende typen in een verzameling met een vaste grootte:
let person: (String, i32) = (String::from("Alice"), 30);
// Destructuring to extract values
let (name, age) = person;
// Direct access with index using dot (.)
let name_direct = person.0;
let age_direct = person.1;Arrays (lijsten met vaste grootte)
Een array groepeert meerdere elementen van hetzelfde hetzelfde type in een verzameling met een vaste grootte die op de stapel is opgeslagen:
let numbers = [1, 2, 3, 4, 5]; // Inferred as [i32; 5]
let first = numbers[0]; // Access by index
let third = numbers[2];Als u probeert toegang te krijgen tot een index buiten de arraygrenzen (bijvoorbeeld numbers[10]), crasht Rust onmiddellijk (in paniek) tijdens runtime in plaats van ongeautoriseerde geheugentoegang toe te staan.
Vergelijking
| Kenmerk | Tupel | Array |
|---|---|---|
| Elementtypen | Kan anders zijn | Moet hetzelfde zijn |
| Grootte | Vast | Vast |
| Toegang | Indexeren via punt (bijvoorbeeld .0) | Vierkante haakjes (bijvoorbeeld [0]) |
Probeer het zelf
Declareer een tupel met de naam stats met daarin de leeftijd 30 (geheel getal) en de score 95,5 (float). Druk vervolgens de partituur af op het scherm door rechtstreeks toegang te krijgen tot het tweede element van de tuple met behulp van de index.
Toon hint
Maak de tupel met `let stats = (30, 95.5);`. Krijg toegang tot het tweede element met behulp van `stats.1` in de `println!` macro.
Oplossing beschikbaar na 3 pogingen
Declareer een array met de naam getallen die de gehele waarden van 1 tot en met 5 bevatten. Druk het derde element van de array (index 2) af naar het scherm met behulp van println!.
Toon hint
Declareer de array met `let getallen = [1, 2, 3, 4, 5];` en krijg toegang tot het derde element door het te indexeren met `[2]`.
Oplossing beschikbaar na 3 pogingen
Gegeven het tupel `let point = (10, 20);`, gebruik je destructurering om de waarden te extraheren in twee variabelen genaamd `x` en `y`. Druk vervolgens de som af van `x` en `y`.
Toon hint
Gebruik de syntaxis `let (x, y) = point;` om de tupel te destructureren en tel vervolgens de variabelen op in `println!`.
Oplossing beschikbaar na 3 pogingen