Rust Konzepte fertig
This commit is contained in:
parent
7f1994ed9a
commit
8790d6159a
@ -1,7 +1,7 @@
|
||||
:experimental:
|
||||
:docdatetime: 2022-06-14T14:33:52.489Z
|
||||
:docdatetime: 2022-06-17T21:46:42.272Z
|
||||
|
||||
= Concepts
|
||||
= Konzepte
|
||||
|
||||
https://doc.rust-lang.org/book/ch03-00-common-programming-concepts.html[Link zum Buch]
|
||||
|
||||
@ -191,3 +191,101 @@ x[0] = 16; // x = [16, 15, 15]
|
||||
|
||||
Im Gegensatz zu C-Arrays wird allerdings vor dem Zugriff auf das Array ein Check durchgeführt.
|
||||
Während C also auch außerhalb des Arrays Speicher lesen kann (mindestens theoretisch), kommt es in Rust dann zu einem Compilerfehler oder einer Runtime-Panic.
|
||||
|
||||
== Funktionen
|
||||
|
||||
Sind wie normale Funktionen in C auch. Keyword ist `fn`.
|
||||
|
||||
Beispiel:
|
||||
|
||||
[source, Rust]
|
||||
----
|
||||
fn calculate_sum(a: i32, b: i32) -> i64 {
|
||||
// Statements können natürlich normal genutzt werden
|
||||
let c: i64 = a + b
|
||||
|
||||
// Wenn das letzte Statement kein ";" am Ende hat, ist es die Rückgabe
|
||||
// Quasi "return c;"
|
||||
// "let ...." returnt aber nichts
|
||||
// Könnte aber auch einfach nur "a + b" sein.
|
||||
c
|
||||
}
|
||||
----
|
||||
|
||||
== Kommentare
|
||||
|
||||
Schon häufiger in den Beispielen - einfach `//`.
|
||||
Es gibt auch noch spezielle Docstrings, aber das kommt später.
|
||||
|
||||
== Kontrollfluss
|
||||
=== `if`
|
||||
|
||||
- ohne runde Klammern um die Bedingung
|
||||
- _immer_ geschweifte Klammern, zumindest kein Beispiel ohne
|
||||
- Geht auch als short-if bei `let x = if condition { 5 } else { 6 }`
|
||||
- Bedingung *muss* ein bool sein!
|
||||
|
||||
=== `loop`
|
||||
|
||||
- Basically ein `while (true)`
|
||||
- `break` und `continue`
|
||||
- Können labels haben. Dann kann `break 'label` genutzt werden
|
||||
|
||||
Beispiel für labels:
|
||||
|
||||
[source, Rust]
|
||||
----
|
||||
fn main() {
|
||||
'outer: loop {
|
||||
let mut a = 1;
|
||||
loop {
|
||||
a += 1;
|
||||
if a == 10 {
|
||||
break 'outer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
----
|
||||
|
||||
==== Ergebnis aus der Loop
|
||||
|
||||
`break` mit Wert ist Rückgabe.
|
||||
Einfaches Beispiel:
|
||||
|
||||
[source, Rust]
|
||||
----
|
||||
fn main() {
|
||||
let mut counter = 0;
|
||||
|
||||
let result = loop {
|
||||
counter += 1;
|
||||
|
||||
if counter == 10 {
|
||||
break counter * 2;
|
||||
}
|
||||
};
|
||||
|
||||
println!("{}", result); // 20
|
||||
}
|
||||
----
|
||||
|
||||
=== `while`
|
||||
|
||||
- nutzt auch keine runden Klammern
|
||||
- sonst normal
|
||||
|
||||
=== `for`
|
||||
|
||||
Looped durch eine Collection (wie in Python).
|
||||
|
||||
[source, Rust]
|
||||
----
|
||||
fn main() {
|
||||
let a = [10, 20, 30, 40, 50];
|
||||
|
||||
for element in a {
|
||||
println!("{}", element);
|
||||
}
|
||||
}
|
||||
----
|
@ -39,7 +39,7 @@
|
||||
{ "title": "00 - Hello World", "filename": "00 - Hello World"},
|
||||
{ "title": "01 - Cargo", "filename": "01 - Cargo"},
|
||||
{ "title": "02 - Higher-Lower-Game", "filename": "02 - Higher-Lower-Spiel"},
|
||||
{ "title": "03 - Konzepte", "filename": "03 - Concepts"}
|
||||
{ "title": "03 - Cheatsheet", "filename": "03 - Concepts"}
|
||||
]
|
||||
}
|
||||
]
|
Loading…
Reference in New Issue
Block a user