Rust Konzepte fertig
This commit is contained in:
parent
7f1994ed9a
commit
8790d6159a
@ -1,7 +1,7 @@
|
|||||||
:experimental:
|
: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]
|
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.
|
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.
|
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": "00 - Hello World", "filename": "00 - Hello World"},
|
||||||
{ "title": "01 - Cargo", "filename": "01 - Cargo"},
|
{ "title": "01 - Cargo", "filename": "01 - Cargo"},
|
||||||
{ "title": "02 - Higher-Lower-Game", "filename": "02 - Higher-Lower-Spiel"},
|
{ "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