EMZETT.
Login

Kurz: Debug, Display, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default, From, Into, Iterator, Drop, Add, Deref, AsRef, Send, Sync.

Teil des Kurses Rust

Kapitel 13 von 13 im Kurs Rust (Abschnitt „Nachschlagen“). Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Typen

TypBeispiele
Ganzzahleni8 i16 i32 i64 i128 isize, u8 u16 u32 u64 u128 usize
Gleitkommaf32, f64
Sonstigebool, char, () (Unit)
TextString (besitzt), &str (geliehen)
ZusammengesetztTupel (i32, f64), Array [i32; 3], Slice &[i32]
StandardVec<T>, HashMap<K,V>, Option<T>, Result<T,E>, Box<T>

Besitz und Referenzen

SyntaxBedeutung
let a = b;Besitz zieht um (bei Nicht-Copy-Typen)
b.clone()tiefe Kopie
&xgeliehene Referenz (nur lesen), beliebig viele
&mut xveränderbare Referenz, nur eine zur selben Zeit
'aLifetime-Parameter
*rDereferenzieren

Kontrollfluss

if x > 0 { ... } else if x == 0 { ... } else { ... }
let w = if a { 1 } else { 2 };
match wert { 1 => ..., 2 | 3 => ..., 4..=9 => ..., n if n < 0 => ..., _ => ... }
if let Some(x) = opt { ... }
let Some(x) = opt else { return };
while bedingung { ... }
loop { ... break wert; }
for i in 0..10 { ... }          // 0..=10 inklusive

Funktionen, Structs, Enums, Traits

fn name(a: i32, b: &str) -> i32 { a }
struct Punkt { x: f64, y: f64 }
impl Punkt { fn neu() -> Self {..} fn laenge(&self) -> f64 {..} }
enum Form { Kreis(f64), Rechteck { b: f64, h: f64 }, Leer }
trait Tier { fn laut(&self) -> String; }
impl Tier for Hund { ... }
fn f<T: Display + Clone>(x: T) where T: Debug {..}
fn g(x: &impl Tier) {..}
Box<dyn Tier>

Fehler

MusterBedeutung
Option<T>: Some(x)/NoneWert optional
Result<T, E>: Ok(x)/Err(e)Erfolg oder Fehler
x?Fehler nach oben weitergeben
.unwrap() / .expect("msg")Panic bei Fehler (nur Tests, Prototypen)
.unwrap_or(d), .unwrap_or_else(f)Ersatzwert
.map(f), .and_then(f), .ok_or(e)Verketten und Umwandeln

Wichtige Makros

MakroZweck
println!, print!, eprintln!Ausgabe
format!String bauen
vec![]Vec erzeugen
assert!, assert_eq!Prüfungen
panic!, todo!, unreachable!Abbrechen / Platzhalter
dbg!Debug-Ausgabe mit Position
matches!Muster als bool prüfen

Formatierung

PlatzhalterAusgabe
{} / {:?} / {:#?}Display / Debug / hübsches Debug
{:>8} / {:<8} / {:^8}rechts / links / zentriert
{:08.3}Breite 8, 3 Nachkommastellen, mit Nullen
/ / hex / binär / wissenschaftlich
{name} / {0}benannt / positional

Standard-Traits

Debug, Display, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default, From, Into, Iterator, Drop, Add, Deref, AsRef, Send, Sync.

Cargo-Befehle

cargo new, run, build [--release], check, test, fmt, clippy, add, doc --open, update, publish.

Häufige Compilerfehler

FehlerUrsache / Lösung
E0382 borrow of moved valueWert wurde verschoben: clone() oder leihen
E0499 two mutable borrowszwei &mut gleichzeitig: Gültigkeit verkürzen
E0502 mutable and immutable borrowlesen und schreiben gleichzeitig: trennen
E0308 mismatched typesTyp passt nicht: Umwandlung mit as, into, parse
E0106 missing lifetime specifierLifetime benennen
E0596 cannot borrow as mutablemut fehlt

Weiterlernen

  • The Rust Programming Language (“das Buch”) auf doc.rust-lang.org/book
  • Rust by Example und Rustlings (Übungen)
  • Rust Playground (play.rust-lang.org) zum Ausprobieren

Merke

  • Besitz, Leihen und Lifetimes sind das Herz von Rust
  • Option und Result ersetzen null und Exceptions
  • Traits und Generics statt Vererbung
  • Cargo bündelt Build, Tests, Formatierung und Pakete

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Module, Cargo und Tests

Alle Kapitel: Rust im Überblick