diff --git a/0-introduction/2-hello-world.rs b/0-introduction/2-hello-world.rs index 47ad8c6..a822746 100644 --- a/0-introduction/2-hello-world.rs +++ b/0-introduction/2-hello-world.rs @@ -1,3 +1,4 @@ fn main() { - println!("Hello World!"); + // Kommentare wie gewohnt mit 2 Slashes + println!("Hello World!"); // Dies ist ein Makro für die Konsolenausgabe } diff --git a/1-basics/1-variablen.rs b/1-basics/1-variablen.rs new file mode 100644 index 0000000..e4091d4 --- /dev/null +++ b/1-basics/1-variablen.rs @@ -0,0 +1,30 @@ +fn main() { + let x = 42; // unveränderbar (final in Java) + //x += 1; // Das würde nicht funktionieren + println!("{x}"); + + let mut y = 24; // mut == mutable (also veränderbar) + println!("{y}"); + + y += 1; // Das funktioniert + println!("{y}"); + + let x = 187; // Shadowing: es wird eine neue Viariable mit dem selben Namen erstellt, dieser überschattet die vorherige Variable + println!("{x}"); + + { + // Hier sind wir in einem Block + // Wenn hier Variablen deklariert werden, sind sie außerhalb des Blocks nicht mehr verfügbar + + let x = 1234; // Shadowing geht zwar auch ohne Block, aber das verdeutlicht, dass man in Blöcken Variablen deklarieren kann, die gleich heißen wie die von außerhalb + println!("{x}"); + } + + println!("{x}"); // Der Wert ist wieder der Alte + + let x = "Typwechsel ist erlaubt!"; + println!("{x}"); + + const KONSTANTE: i32 = 42; // Gar nicht mehr veränderbar (auch nicht durch Shadowing) + println!("{KONSTANTE}"); +} diff --git a/1-basics/2-datentypen.rs b/1-basics/2-datentypen.rs new file mode 100644 index 0000000..41ec290 --- /dev/null +++ b/1-basics/2-datentypen.rs @@ -0,0 +1,37 @@ +fn main() { + // Ganzzahlen + let integer: i32 = -420; // Es gibt Integer mit unterschiedlicher Bitlänge (8, 16, 32, 64, 128 oder architekturspezifisch (isize)) + println!("{integer}"); + let unsigned: u32 = 420; // Unsigned Integer mit unterschiedlicher Bitlänge (8, 16, 32, 64, 128 oder architekturspezifisch (usize)) + println!("{unsigned}"); + + // Integer Literale geben unterschiedliche Zahlensysteme an + let integer = 98_765; // Dezimal (Unterstriche als Trennzeichen erlaubt) + println!("{integer}"); + + let hexadezimal = 0xff; + println!("{hexadezimal}"); + + let oktal = 0o77; + println!("{oktal}"); + + let binaer = 0b1010_1010; + println!("{binaer}"); + + let byte = b'A'; + println!("{byte}"); + + // Gleitkommazahlen + let einfach: f32 = 3.14; // Einfache Genauigkeit (wie float in Java) + println!("{einfach}"); + + let doppelt: f64 = 3.14159265359; // Doppelte Genauigkeit (wie double in Java) -- Standardwert + println!("{doppelt}"); + + let boolean: bool = true; // Boolean (true oder false) + println!("{boolean}"); + println!("{}", !boolean); // Wert negieren + + let zeichen: char = 'a'; // Character + println!("{zeichen}"); +} diff --git a/1-basics/3-compounds.rs b/1-basics/3-compounds.rs new file mode 100644 index 0000000..0c48483 --- /dev/null +++ b/1-basics/3-compounds.rs @@ -0,0 +1,18 @@ +fn main() { + let string: &str = "Das ist ein String!"; + println!("{string}"); + + let tupel = (42, "Das hier ist ein Tupel!", true); + let (a, b, c) = tupel; + println!("{}, {}, {}", a, b, c); + + let array: [&str; 5] = ["Das", " ist", " ein", " Array", "!"]; // Es wird explizit gesagt, welche Größe es hat + println!("{:?}", array); // Das wird auch später erklärt + + let array = [1, 2, 3, 4, 5, 6]; // Größe wird dynamisch bestimmt + println!("{:?}", array); + let element = array[0]; // Man kann die Elemente wie gewohnt ansprechen + println!("{}", element); + + println!("{}", array.len()); // Länge kann ausgegeben werden +} \ No newline at end of file