Menu
Coddy logo textTech

Rust Spickzettel

Zuletzt aktualisiert

Hello World & Aufbau

Ein Rust-Programm beginnt bei fn main; Anweisungen enden mit Semikolons.

OperationSyntax
Einstiegspunktfn main() { ... }
Eine Zeile ausgebenprintln!("Hello, World!");
Mit Werten ausgebenprintln!("{} is {}", name, age);
Debug-Form ausgebenprintln!("{:?}", value);
Zeilenkommentar// comment
Ein Element aus einem Modul verwendenuse std::collections::HashMap;
Bauen & ausführencargo run
Eine Release-Binärdatei bauencargo build --release

Variablen & Typen (let / mut)

Bindungen sind standardmäßig unveränderlich; füge mut hinzu, um Neuzuweisung zu erlauben.

OperationSyntax
Unveränderliche Bindunglet x = 5;
Veränderliche Bindunglet mut count = 0;
Expliziter Typlet age: u32 = 30;
Konstanteconst MAX: u32 = 100;
Shadowinglet x = x + 1;
Ganzzahltypeni32, u32, i64, usize
Andere Skalaref64, bool, char
Tupellet pair: (i32, &str) = (1, "a");
Typumwandlunglet f = x as f64;

Kontrollfluss

if ist ein Ausdruck, und Rust hat drei Schleifenformen.

OperationSyntax
If / elseif x > 0 { ... } else { ... }
If als Ausdrucklet y = if x > 0 { 1 } else { -1 };
Endlosschleifeloop { ... }
Schleife, die einen Wert zurückgibtlet v = loop { break 5; };
While-Schleifewhile x < 100 { ... }
For über einen Bereichfor i in 0..10 { ... }
For über eine Collectionfor item in &items { ... }
Break / continuebreak;, continue;

Funktionen

Der letzte Ausdruck (ohne Semikolon) ist der Rückgabewert.

OperationSyntax
Einfache Funktionfn add(a: i32, b: i32) -> i32 { a + b }
Expliziter Returnfn f() -> i32 { return 5; }
Kein Rückgabewertfn log(msg: &str) { ... }
Eine Referenz nehmenfn len(s: &String) -> usize { s.len() }
Closurelet add = |a, b| a + b;
Closure mit Typlet sq = |x: i32| -> i32 { x * x };
Funktion als Argumentfn apply(f: impl Fn(i32) -> i32) { ... }

Ownership & Borrowing

Jeder Wert hat einen Besitzer; Referenzen leihen ihn aus, ohne den Besitz zu übernehmen.

OperationSyntax
Move (Besitz wird übertragen)let b = a; (a nicht mehr gültig)
Clone (tiefe Kopie)let b = a.clone();
Unveränderliche Ausleihelet r = &x;
Veränderliche Ausleihelet r = &mut x;
Ausleihe in einer Funktionfn read(s: &String) { ... }
Dereferenzieren*r
Borrowing-RegelViele & ODER ein &mut gleichzeitig, nicht beides
Slice (leiht einen Bereich aus)let part = &arr[1..3];

Structs & Enums

Structs gruppieren zusammengehörige Daten; Enums modellieren einen Wert, der eine von mehreren Varianten ist.

OperationSyntax
Ein Struct definierenstruct Point { x: i32, y: i32 }
Eine Instanz erstellenlet p = Point { x: 1, y: 2 };
Auf ein Feld zugreifenp.x
Tupel-Structstruct Pair(i32, i32);
Methode (impl-Block)impl Point { fn dist(&self) -> f64 { ... } }
Assoziierte Funktionimpl Point { fn new() -> Self { ... } }
Ein Enum definierenenum Shape { Circle(f64), Rect(f64, f64) }
Enum mit benannten Feldernenum Msg { Move { x: i32, y: i32 } }
Traits ableiten#[derive(Debug, Clone)]

Pattern Matching (match)

match vergleicht einen Wert mit Mustern und muss erschöpfend sein.

OperationSyntax
Auf Werte matchenmatch x { 1 => "one", _ => "other" }
Ein Enum matchenmatch shape { Shape::Circle(r) => ... }
Einen Bereich matchenmatch n { 1..=5 => ..., _ => ... }
Binden mit einem Guardmatch x { n if n > 0 => ... }
Ein Tupel matchenmatch point { (0, y) => ..., (x, _) => ... }
if let (einzelnes Muster)if let Some(v) = opt { ... }
while letwhile let Some(v) = stack.pop() { ... }
Ein Struct destrukturierenlet Point { x, y } = p;

Traits & Generics

Traits definieren gemeinsames Verhalten; Generics lassen Code über viele Typen hinweg funktionieren.

OperationSyntax
Ein Trait definierentrait Area { fn area(&self) -> f64; }
Ein Trait implementierenimpl Area for Circle { fn area(&self) -> f64 { ... } }
Standardmethodetrait Greet { fn hi(&self) { ... } }
Generische Funktionfn largest<T: PartialOrd>(list: &[T]) -> &T { ... }
Generisches Structstruct Wrapper<T> { value: T }
Trait-Bound (where)fn f<T>(x: T) where T: Display { ... }
impl-Trait-Argumentfn print(item: impl Display) { ... }
Trait-Objektlet shapes: Vec<Box<dyn Area>> = ...;

Fehlerbehandlung (Result / Option)

Rust modelliert Abwesenheit mit Option und behebbare Fehler mit Result.

OperationSyntax
Optionaler WertOption<T>: Some(v) oder None
Result-TypResult<T, E>: Ok(v) oder Err(e)
Ein Result zurückgebenfn read() -> Result<String, Error> { ... }
Mit ? weiterreichenlet data = read()?;
Unwrap (paniert bei None/Err)opt.unwrap()
Standardwertopt.unwrap_or(0)
Einen Wert mappenopt.map(|v| v + 1)
Beide Zweige behandelnmatch res { Ok(v) => ..., Err(e) => ... }
Option in Result umwandelnopt.ok_or("missing")?

Häufige Collections (Vec / HashMap)

Vec ist ein wachsendes Array; HashMap ist ein Schlüssel-Wert-Speicher.

OperationSyntax
Einen Vektor erstellenlet mut v: Vec<i32> = Vec::new();
Vektor-Literallet v = vec![1, 2, 3];
Push / popv.push(4);, v.pop();
Indexzugriffv[0]
Sicherer Zugriffv.get(0) gibt Option<&T> zurück
Durchlaufenfor x in &v { ... }
Längev.len()
Eine Map erstellenlet mut m: HashMap<String, i32> = HashMap::new();
Einfügen / lesenm.insert(k, v);, m.get(&k)
Entry-API*m.entry(k).or_insert(0) += 1;

Die Rust-Syntax, die du am häufigsten brauchst, auf einer Seite. Dieser Rust-Spickzettel ist eine Schnellreferenz für die Kernsprache - Variablen und Veränderlichkeit, Ownership und Borrowing, Structs und Enums, Pattern Matching, Traits und Generics sowie die Result- und Option-Typen hinter Rusts Fehlerbehandlung.

Alles hier ist Standard-Rust, das auf einer aktuellen stabilen Toolchain kompiliert. Kopiere, was du brauchst, oder probiere jeden Codeschnipsel live im Rust-Playground aus - keine cargo-Installation nötig.

Rust-Spickzettel FAQ

Ist dieser Rust-Spickzettel kostenlos?
Ja. Dieser Rust-Spickzettel ist völlig kostenlos, ohne erforderliche Anmeldung. Setze ein Lesezeichen und komm jederzeit wieder, wenn du ein match-Muster, einen Trait-Bound oder eine Collection-Methode nachschlagen möchtest.
Was sind Ownership und Borrowing in Rust?
Ownership ist Rusts Speichermodell: Jeder Wert hat genau einen Besitzer, und der Wert wird freigegeben, wenn dieser Besitzer den Gültigkeitsbereich verlässt. Borrowing erlaubt dir den Zugriff auf einen Wert, ohne den Besitz zu übernehmen, indem du eine Referenz verwendest - &x für eine unveränderliche Ausleihe oder &mut x für eine veränderliche. Der Compiler erzwingt eine Regel: Du kannst viele unveränderliche Ausleihen oder genau eine veränderliche Ausleihe gleichzeitig haben, was Data Races zur Compilezeit verhindert.
Was ist der Unterschied zwischen Result und Option in Rust?
Option<T> steht für einen Wert, der fehlen kann - er ist entweder Some(v) oder None, und du verwendest ihn, wenn kein Fehler zu melden ist, sondern nur ein fehlender Wert. Result<T, E> steht für eine Operation, die fehlschlagen kann - sie ist entweder Ok(v) oder Err(e) und trägt einen Fehlerwert, wenn etwas schiefgeht. Verwende Option für „vielleicht vorhanden" und Result für „dies könnte fehlschlagen"; der ?-Operator reicht beide weiter.
Kann ich Rust online üben?
Ja. Öffne den Rust-Playground, um jeden Codeschnipsel aus diesem Spickzettel in deinem Browser zu kompilieren und auszuführen - kein cargo oder Toolchain zu installieren. Wenn du Struktur möchtest, führt dich Coddys kostenloser interaktiver Rust-Kurs Schritt für Schritt von Variablen und Ownership zu Traits und Fehlerbehandlung.
Ist dieser Spickzettel für Anfänger geeignet?
Ja. Er ist von den häufigsten Themen (Variablen, Kontrollfluss, Funktionen) hin zu den fortgeschrittenen (Traits, Generics, Fehlerbehandlung) gegliedert, sodass du die oberen Abschnitte schon am ersten Tag nutzen und in Ownership und den Rest hineinwachsen kannst.
Coddy programming languages illustration

Lerne Rust mit Coddy

LOS GEHT'S