Reflexionen über die Programmiersprache Rust 15
deutsch·@jeyf123·
0.000 HBDReflexionen über die Programmiersprache Rust 15
***Match** Dieser Abschnitt wird wahrscheinlich nicht gar so lange werden. Match kennt man in anderen Programmiersprachen als eine Art switch > case Anwendung. Wenn ich beides noch besser kennen würde, könnte ich auch die Unterschiede erklären^^ **Wozu *match?*** Match vergleicht eine Variable mit auszuführenden Bedingungen. Sie ist *if* nicht unähnlich, aber etwas eleganter, wenn es darum geht ein bestimmtes Spektrum an Möglichkeiten abzugreifen. Der Syntax sieht so aus: ``` let var = x match var{ opt1 => mach das opt2 => mach dies opt3 => mach jenes . . _ => mach das, wenn nichts zu var passt } ``` Und gleich ein konkretes Beispiel ``` fn main (){ let zahl = 2; match zahl{ 1 => println!("Das war die Eins."), 2 => println!("Das war die Zwei."), 3 => println!("Das war die Drei."), _ => println!("keine Ahnung was du willst."), } } ``` Ausgabe  Obwohl es glaub ich eh nicht so kompliziert ist, ein wenig Erklärung. Die Zahl 2 wird als Variable *zahl* deklariert. Mit match wird geprüft, was mit *zahl* passieren soll. 2 entspricht den Anforderungen und das wird auch ausgegeben. Der Unterstrich als letztes Element entspricht dem Defaultwert. Das ist was zutrifft, wenn alles andere schon versagt hat. Als eine Art Fleißaufgabe, mache ich die selbe Funktionalität mit einer *if*-Anweisung, damit der Unterschied deutlicher erkennbar ist. ``` let zahl = 2; if zahl == 1{ println!("Das war die Eins."); } else if zahl == 2{ println!("Das war die Zwei."); } else if zahl == 3{ println!("Das war die Drei."); } else{ println!("keine Ahnung was du willst."); } ``` Hat natürlich die selbe Ausgabe wie vorhin. Etwas, das mir auch gerade ein/aufgefallen ist. Die Elemente im Match müssen dem Datentyp der Variable entsprechen, die sie prüfen. Sonst wird der Compiler gaga. Als Beispiel hier ein Stringslice. ``` let var = "Ich bin ein Stringslice."; match var{ "Huhu" => println!("Der Text lautet: Huhu."), "Haha" => println!("Der Text lautet: Haha."), "Hihi" => println!("Der Text lautet: Hihi."), _ => println!("Das muss etwas vollkommen anderes sein."), } ``` Ausgabe  Match bietet unter anderem auch an, mathematische Operatoren zu verarbeiten. Dh. ich kann zB bestimmte Bereiche (von - bis) nach Matches überprüfen. ``` let x = 15; match x{ 1..=10 => println!("Eine Zahl zwischen 1 und 10"), 11..=20 => println!("Eine Zahl zwischen 11 und 20"), 5|10|15|20 => println!("Eines der Zahlen 5,10,15 oder 20"), //wird nicht mehr geprüft _ => println!("unbekannte Zahl"), } ``` Ausgabe  Vielleicht ist euch aufgefallen, dass die 3te Zeile im Match genauso zutreffend ist, allerdings erfüllt die 2te bereits den Zweck und Nr. 3 kommt somit nicht mehr zum tragen. Eines ist mir noch aufgefallen. Die *match*-Anweisung braucht zwingend die *_default* Definition. Das unterscheidet sich dann auch vom *If*. Das *else* ist optional dort. Das wars mit der Basis von *match*. Im Anhang wieder die bekannten Dinge. Falls ich das noch nicht erwähnt habe, die verschiedenen Anweisungen im Match werden nicht durch ein Semikolon, sondern durch einen Beistrich getrennt. ``` fn main (){ let zahl = 2; match zahl{ 1 => println!("Das war die Eins."), 2 => println!("Das war die Zwei."), 3 => println!("Das war die Drei."), _ => println!("keine Ahnung was du willst."), } let zahl = 2; if zahl == 1{ println!("Das war die Eins."); } else if zahl == 2{ println!("Das war die Zwei."); } else if zahl == 3{ println!("Das war die Drei."); } else{ println!("keine Ahnung was du willst."); } let var = "Ich bin ein Stringslice."; match var{ "Huhu" => println!("Der Text lautet: Huhu."), "Haha" => println!("Der Text lautet: Haha."), "Hihi" => println!("Der Text lautet: Hihi."), _ => println!("Das muss etwas vollkommen anderes sein."), } let x = 15; match x{ 1..=10 => println!("Eine Zahl zwischen 1 und 10"), 11..=20 => println!("Eine Zahl zwischen 11 und 20"), 5|10|15|20 => println!("Eines der Zahlen 5,10,15 oder 20"), //wird nicht mehr geprüft _ => println!("unbekannte Zahl"), } } ``` Ausgabe  Vom Editor  
👍 udabeu, orionvk, meins0815, kryptodenno, tokenindustry, fabio, dashforcenews-de, noctury, blackmedschn, lifestylechill, crimo, herz-ass, freiheitsbote, dash-embassy, shopinbit, charlissy, vikisecrets, condeas, babschnae, xels, fw206, carina89, balte, okean123, taldor, indextrader24, mrhoofman, muelli, alucian,