====== Beispiel-Programme in Rust ====== * [[https://doc.rust-lang.org/stable/rust-by-example|Rust-Beispiele]] * [[https://docs.rs/postgres/|PostgreSQL-Abfrage]] * [[https://docs.rs/mysql/|MySQL-Abfrage]] ===== meine Kode-Beispiele ===== ==== Hallo Welt ==== // Hallo Welt fn main() { println!("Hallo, Welt!") } > rustc Hallo_Welt.rs > ls -lha total 606 drwxr-xr-x 2 fritz fritz 4B Apr 17 13:03 . drwx------ 137 fritz fritz 459B Apr 17 13:05 .. -rwxr-xr-x 1 fritz fritz 392K Apr 17 13:03 hallo_welt -rw-r--r-- 1 fritz fritz 43B Apr 17 13:03 hallo_welt.rs > ./Hallo_Welt Hallo, Welt! ==== hoch zählen ==== // hoch zählen // // https://doc.rust-lang.org/book/iterators.html // fn main() { for x in 0..10 { println!("{}", x); } } > rustc hoch_zaehlen.rs > ./hoch_zaehlen 0 1 2 3 4 5 6 7 8 9 ==== Variable ==== // Variable // // https://doc.rust-lang.org/std/fmt/ // fn main() { // damit "a" verändert werden kann, muss "mut" davor gestellt werden let mut a = 1; println!("{}", a); a = 2; println!("{}", a); } > rustc Variable.rs > ./Variable 1 2 ==== if ==== // if // // https://doc.rust-lang.org/book/if.html // fn main() { let x = 5; if x == 5 { println!("x is five!"); } else if x == 6 { println!("x is six!"); } else { println!("x is not five or six :("); } } > rustc if.rs > ./if x is five! ==== for ==== use std::env; fn main() { let vector: Vec = env::args().collect(); let l = vector.len(); println!("Es sind {} Elemente im Vektor.", l); for i in 0..l { println!("Das {}. Vektorelement: {}", i, &vector[i]); } } ==== while ==== // while // // https://doc.rust-lang.org/book/while-loops.html // fn main() { let mut x = 5; // mut x: u32 let mut done = false; // mut done: bool while !done { x += x - 3; println!("{}", x); if x % 5 == 0 { done = true; } } } > rustc while.rs > ./while 7 11 19 35 ==== Datei lesen ==== [[https://stackoverflow.com/questions/25106554/why-doesnt-println-work-in-rust-unit-tests]] use std::fs::File; use std::io::prelude::*; use std::path::Path; fn read_file(path: &Path) { let mut file = File::open(path).unwrap(); let mut contents = String::new(); file.read_to_string(&mut contents).unwrap(); println!("{}", contents); } fn main() { let path = &Path::new("/tmp/test.txt"); println!("--------------------------------------------------------------------------------"); println!("path: {:?}", path); println!("================================================================================"); read_file(path); println!("################################################################################"); } ==== Argumente ==== * [[http://stackoverflow.com/questions/15619320/how-to-access-command-line-parameters-in-rust]] * [[https://doc.rust-lang.org/std/index.html|Crate std - The Rust Standard Library - use std::]] === Argumente: Beispiel 1 === // // Argumente: Beispiel 1 // // An easy way to deal with the result of args is to convert it to a Vec: use std::env; fn main() { let args: Vec<_> = env::args().collect(); if args.len() > 1 { println!("mein Aufruf lautet {}", args[0]); println!("das erste Argumente lautet {}", args[1]); println!("das zweite Argumente lautet {}", args[2]); } } > rustc argv_0.rs > ./argv_0 1 2 3 4 A B C d mein Aufruf lautet ./argv_0 das erste Argumente lautet 1 das zweite Argumente lautet 2 === Argumente: Beispiel 2 === // // Argumente: Beispiel 2 // // You can use the whole standard iterator toolbox to work with these arguments. // For example, to retrieve only the first argument: use std::env; fn main() { if let Some(arg0) = env::args().nth(0) { println!("Argument 0 {}", arg0); } println!("--------------------------------------------------------------------------------"); if let Some(arg1) = env::args().nth(1) { println!("Argument 1 {}", arg1); } } > rustc argv_1.rs > ./argv_1 1 2 3 4 A B C d Argument 0 ./argv_1 -------------------------------------------------------------------------------- Argument 1 1 === Argumente: Beispiel 3 === // // Argumente: Beispiel 3 // use std::env; fn main() { let args: Vec<_> = env::args().collect(); if args.len() > 1 { let p = args.len(); // mut x: u32 let i = 1; //println!("das erste Argumente lautet {}", args[1]); for x in i..p { println!("das {}-te Argumente lautet {}", x, args[x]); } } } > rustc argv_alle_0.rs > ./argv_alle_0 1 2 3 4 A B C d das 1-te Argumente lautet 1 das 2-te Argumente lautet 2 das 3-te Argumente lautet 3 das 4-te Argumente lautet 4 das 5-te Argumente lautet A das 6-te Argumente lautet B das 7-te Argumente lautet C das 8-te Argumente lautet d ==== Read from stdin ==== [[https://www.programming-idioms.org/idiom/120/read-integer-from-stdin/1906/rust|Idiom #120 Read integer from stdin]] fn get_input() -> String { let mut buffer = String::new(); std::io::stdin().read_line(&mut buffer).expect("Failed"); buffer } let n = get_input().trim().parse::().unwrap(); ==== Stdio ==== [[https://doc.rust-lang.org/std/process/struct.Stdio.html|Struct std::process::Stdio]] ===== was ich noch mit Rust lernen möchte/muß ===== FIXME * Dateien-/Verzeichnissoperationen * öffnen * anlegen * überschreiben * löschen * Verzweigungen * if-then-else * Schleifen * while * for (Zählschleife) * Argumente/Parameter an der CLI übergeben * arbeiten mit Arrays * eigene Funktionen erstellen