Spelling fixes...

This commit is contained in:
2022-10-18 17:56:26 +02:00
parent a5161afd72
commit 1af6779b0a
11 changed files with 43 additions and 42 deletions

View File

@ -1,5 +1,5 @@
:experimental:
:docdatetime: 2022-08-10T17:04:53+02:00
:docdatetime: 2022-10-18T17:56:26+02:00
= Cargo
@ -21,7 +21,7 @@ Bibliothek. +
Es wird auch gleich `main.rs`, ein `.git`-Ordner (inkl. `.gitignore`)
und `Cargo.toml` erstellt.
== Angelegte Datein
== Angelegte Dateien
=== Cargo.toml

View File

@ -1,5 +1,5 @@
:experimental:
:docdatetime: 2022-08-10T17:04:53+02:00
:docdatetime: 2022-10-18T17:56:26+02:00
= Erstes Spiel
@ -55,7 +55,7 @@ CLI-Eingabe
** ohne die ``use'' Anweisung oben, müsste es `std::io::stdin()` sein
* `.read_line(&mut guess)` ließt eine Zeile und speichert sie in guess
** `&` erstellt dabei eine Referenz (wie in C)
** Referenzen sind standardmäßig imutable - deshalb `&mut`
** Referenzen sind standardmäßig immutable - deshalb `&mut`
** `read_line()` gibt ein `Result`-Objekt zurück, dieser kann `Ok` oder
`Err` enthalten
* `.expect("Fehlermeldung")` entpackt das `Result`-Objekt

View File

@ -1,5 +1,5 @@
:experimental:
:docdatetime: 2022-08-10T17:04:53+02:00
:docdatetime: 2022-10-18T17:56:26+02:00
= Konzepte
@ -71,7 +71,7 @@ fn main() {
Die Ausgabe des Programms ist dabei der letztere Wert, hier also 10.
Es ist also mehr eine neue Variable unter dem selben Namen wie die alte.
Sogar der Datentyp kann sich dabei ändern, man muss sich also nicht ständig neue Namen für Variabeln ausdenken, nur weil man sie casted (Juchuu!).
Sogar der Datentyp kann sich dabei ändern, man muss sich also nicht ständig neue Namen für Variablen ausdenken, nur weil man sie casted (Juchuu!).
Da Variablen immer Block-Scope-basiert (?) sind, kann dies natürlich auch in einem eingebetteten Block genutzt werden.
@ -141,7 +141,7 @@ Chars werden mit single-quotes geschrieben (Strings mit doppelten quotes).
Allerdings scheint es noch ein wenig komplizierter zu sein, das kommt aber erst später.
=== Combound Types
=== Compound Types
Gruppierung von mehreren Werten in einem Typ.
==== Tupel

View File

@ -1,5 +1,5 @@
:experimental:
:docdatetime: 2022-08-10T17:04:53+02:00
:docdatetime: 2022-10-18T17:56:26+02:00
= Ownership
@ -8,7 +8,7 @@ https://doc.rust-lang.org/book/ch04-00-understanding-ownership.html[Link zum Buc
== Was ist das?
Jeder Wert hat eine Variable, die ihn "besitzt".
Jeder Wert kann zu einem Zeitpunkt nur von _einer_ Variable bessessen werden.
Jeder Wert kann zu einem Zeitpunkt nur von _einer_ Variable besessen werden.
Sollte die Variable aus dem Scope verschwinden, wird der Wert ungültig und aus dem Speicher entfernt.
== Warum?
@ -148,4 +148,4 @@ Fun fact: String Literale sind auch Slices und damit Referenzen von Strings.
Noch mehr fun fact: Da dynamische String und String Literale damit quasi den selben Typ beschreiben, haben sie auch den gemeinsamen Typ `&str`.
Für Leseoperationen kann also im Allgemeinen dieser benutzt werden.
Slices können auch mutable sein, dafür muss aber das ursprüngliche Array mmutable sein und es kann immer nur ein mutable Slice gleichzetig existieren (also genauso wie beim Ownership).
Slices können auch mutable sein, dafür muss aber das ursprüngliche Array mutable sein und es kann immer nur ein mutable Slice gleichzeitig existieren (also genauso wie beim Ownership).

View File

@ -1,5 +1,5 @@
:experimental:
:docdatetime: 2022-08-10T17:04:53+02:00
:docdatetime: 2022-10-18T17:56:26+02:00
= Enums und Pattern Matching
@ -73,13 +73,13 @@ Es gibt zwar keine Attribute, aber da ja auch die internen Structs Methoden habe
Options hab ich oben schonmal kurz beschrieben.
In Rust ist dieser Datentyp sehr wichtig.
Die Dokumentation dazu ist https://doc.rust-lang.org/std/option/enum.Option.html[hier zu finden] und enthält sehr viel Wichtiges und Interesantes.
Die Dokumentation dazu ist https://doc.rust-lang.org/std/option/enum.Option.html[hier zu finden] und enthält sehr viel Wichtiges und Interessantes.
== `match`
`match` ist quasi das `switch` von Rust.
Nur kann es auch prüfen, ob eine Variable einem Enum-Typen angehört.
So wie Rust bis jetzt klang, kann wahrscheinlich jedem Datentypen ein "match-Trait" gegeben werden, der dann eine "Zugehörigkeit" (Gleicheit stimmt ja irgendwie nicht) prüfen kann.
So wie Rust bis jetzt klang, kann wahrscheinlich jedem Datentypen ein "match-Trait" gegeben werden, der dann eine "Zugehörigkeit" (Gleichheit stimmt ja irgendwie nicht) prüfen kann.
Aber ganz einfach: Angenommen wir wollen die Methode `to_css_string` von oben implementieren.
Diese Methode muss ja, je nach Typ, völlig unterschiedlich funktionieren.
@ -124,7 +124,7 @@ Der Unterschied ist, dass bei `other` noch der Inhalt genutzt werden kann, bei `
=== `if let`
Dieses if-Konstrukt nutzt man am besten, wenn man nur auf eine einzelne Variante eines Enums prüfen möchte.
Letzendlich ist es ganz simpel:
Letztendlich ist es ganz simpel:
[source, rust]
----

View File

@ -1,5 +1,5 @@
:experimental:
:docdatetime: 2022-08-22T14:29:34+02:00
:docdatetime: 2022-10-18T17:56:26+02:00
= How to: Projektmanagement
@ -7,7 +7,7 @@ https://doc.rust-lang.org/book/ch07-00-managing-growing-projects-with-packages-c
== Packages, Crates, Modules, was?
Rust hat ein sehr hierachisches Konzept, was die Strukturierung von Projekten angeht.
Rust hat ein sehr hierarchisches Konzept, was die Strukturierung von Projekten angeht.
Fangen wir mal von oben an:
@ -40,7 +40,7 @@ Ihr Merkmal ist vor allem, dass eine `main`-Funktion existiert, die der Einstieg
==== Library Crate
Wie der Name schon sagt, stellt diese Art Crate nur Funktionen zur verfügung wie eine Bibliothek.
Wie der Name schon sagt, stellt diese Art Crate nur Funktionen zur Verfügung wie eine Bibliothek.
=== Modules
@ -146,7 +146,7 @@ fn main() {
Dagegen gilt für Enums: Wenn der Enum public ist, sind auch alle Varianten public.
==== Abürzungen mit `use`
==== Abkürzungen mit `use`
Angenommen, wir haben eine Mediathek mit Filmen, Serien, Spielen, etc. und brauchen immer lange Zugriffspfade (also z.B. `crate::medien::spiele::liste::add()`), obwohl wir nur Spiele brauchen, kann `use` benutzt werden.

View File

@ -1,5 +1,5 @@
:experimental:
:docdatetime: 2022-08-22T14:29:34+02:00
:docdatetime: 2022-10-18T17:56:27+02:00
= Standard Collections
@ -144,7 +144,7 @@ Das macht das ganze ordentlich schwierig.
Ist immer eine schlechte Idee, außer man weiß exakt wie lang die einzelnen Zeichen (in Byte) des Strings sind.
Im Englischen ist es normalerweise 1 Byte pro Zeichen, Umlaute sind schon 2, und so weiter.
Sollte man außversehen ein Zeichen "durchschneiden" (also nur 1 Byte eines "ü" im Slice haben), gibt es eine Runtime Panic.
Sollte man aus Versehen ein Zeichen "durchschneiden" (also nur 1 Byte eines "ü" im Slice haben), gibt es eine Runtime Panic.
=== Iterieren
@ -164,7 +164,7 @@ for b in "hallo".bytes() {
// Wirft eben die einzelnen u8 raus.
----
Wenn wir "grapheme" haben wollen (Was anscheinend sowas wie "volle Zeichen" sind, mehr als nur char), gibt es keine eingebaute Funktion aber crates, die das lösen.
Wenn wir "grapheme" haben wollen (Was anscheinend so etwas wie "volle Zeichen" sind, mehr als nur char), gibt es keine eingebaute Funktion aber crates, die das lösen.
== HashMaps
@ -180,7 +180,7 @@ use std::collections::HashMap;
// -- Erstellen --
// iter(), zip() und collect()
// collect() kann in alles mögliche wandeln, deshalb muss der Typ anggeben werden.
// collect() kann in alles mögliche wandeln, deshalb muss der Typ angegeben werden.
let woerter = vec![String::from("eins"), String::from("zwei"), String::from("drei")];
let zahlen = vec![1, 2, 3];
let mut zahlwort: HashMap<_, _> = woerter.into_iter().zip(zahlen.into_iter()).collect();