Basics größtenteils fertig, README überarbeitet

main
Semih Uguz 2026-05-30 22:21:43 +02:00
parent 9f09dc60c9
commit 0942590ae5
5 changed files with 112 additions and 25 deletions

View File

@ -10,27 +10,31 @@ fn main() {
let quotient: i32 = produkt / differenz; let quotient: i32 = produkt / differenz;
let modulo: i32 = quotient % 2; let modulo: i32 = quotient % 2;
println!("{summe}"); // Casting durch explizites angeben des Typs, implizit ist es nicht möglich
println!("{differenz}");
println!("{produkt}");
println!("{quotient}");
println!("{modulo}");
// modulo benötigt jetzt keine 32 Bits, man kann es auch in i8 packen // modulo benötigt jetzt keine 32 Bits, man kann es auch in i8 packen
let moduloInKurz = modulo as i8; let moduloInKurz = modulo as i8;
println!("{moduloInKurz}"); println!("{moduloInKurz}");
// Casting von Floating Point Zahlen
let eulerDoppelt: f64 = 2.71828182846;
println!("{eulerDoppelt}");
let eulerEinfach: f32 = eulerDoppelt as f32;
println!("{eulerEinfach}");
// Bei as Konvertierungen von Float in u8 kommt es beim Überschreiten der Grenze zu keinem Overflow, ab der Grenze wird abgeschnitten
println!(" 300.0 as u8 is : {}", 300.0_f32 as u8);
println!("-100.0 as u8 is : {}", -100.0_f32 as u8);
println!(" nan as u8 is : {}", f32::NAN as u8);
// Man kann aber auch witzigere Sachen machen // Man kann aber auch witzigere Sachen machen
println!("{}", 10000000 as u8); println!("{}", 10000000 as u8);
// Casting mit Overflow ist dank der oberen Präprozessoranweisung möglich // Casting mit Overflow ist dank der oberen Präprozessoranweisung möglich
let integer: i32 = -1234; let integer: i32 = -12345;
let unsigned = integer as u8; let unsigned = integer as u8;
println!("{unsigned}"); println!("{unsigned}");
// Problemloses casten in char ist mit as nur möglich, wenn der Ursprungswert ein u8 ist // Problemloses casten in char ist mit as nur möglich, wenn der Ursprungswert ein u8 ist
let character = unsigned as char; let character = unsigned as char;
println!("{character}"); println!("{character}");
} }

View File

@ -19,6 +19,15 @@ fn main() {
// For Loops sind etwas wilder, die klassische Java for-Loop (for (int i = 0; i <= 100; i++) {}) sehe so aus // For Loops sind etwas wilder, die klassische Java for-Loop (for (int i = 0; i <= 100; i++) {}) sehe so aus
for i in 0..100 { for i in 0..100 {
if i % 2 // Das ist quasi der Ternary Operator aus Python
let gerade = if i % 2 == 0 { true } else { false }; // Semicolon wichtig, da das eine Variableninitialisierung ist
println!("{:?}", gerade);
}
// Loop läuft solange, bis ein break irgendwo erscheint, oder endlos
loop {
println!("Endlosschleifeeeee...");
break; // nicht mehr endlos
} }
} }

View File

@ -8,6 +8,8 @@ struct Person {
name: String, name: String,
alter: u8, alter: u8,
} }
// Um Methoden zu schreiben, die man über das Struct aufrufen kann durch einen Punkt,
// kann ein impl {} Block verwendet werden (siehe 9-funktionen.rs)
fn main() { fn main() {
let semih = Person { let semih = Person {

View File

@ -1 +1,59 @@
// Funktion ohne Rückgabewert returnt Unit (leeres Tupel) fn main() {
// Das ist die Main Funktion
// Diese Funktion wird beim Aufruf von rust-script und von cargo run ausgeführt
println!("{:?}", add(400, 20));
odd(67);
random_ausgabe();
// Durch STRUCTNAME::METHODENNAME() können die Funktionen aufgerufen werden, bspw ein Konstruktor um ein neues Struct zu erzeugen
let mut r = Rechteck::new(400.0, 20.0);
r.skalieren(4.0);
println!("{:?}", r.flaeche());
}
// Das ist eine Funktion, die ein Boolean zurück gibt, Parameter können in die Klammern geschrieben werden
// Der zurückgebende Typ wird nach einem -> geschrieben
fn add(a: i32, b: i32) -> i32 {
a + b // implizites return aka wenn der letzte Ausdruck einer Methode kein ; und kein return hat, wird dieses returnt
}
// Diese Funktion hat auch einen Rückgabewert, und zwar den Unit Typ "()"
fn odd(a: i32) -> () {
if a % 2 == 1 {
println!("Ist ungerade");
} else {
println!("Ist gerade");
}
}
// Man kann das -> auch weglassen, dann wird automatisch die Unit zurück gegeben
fn random_ausgabe() {
println!("Funktion ohne Parameter und \"ohne\" Rückgabewert");
}
struct Rechteck {
hoehe: f64,
breite: f64,
}
// Ein impl, damit der Struct nicht ohne Nutzen ist
impl Rechteck {
// Self (mit GROßEM S) == Klassenname in Java
fn new(breite: f64, hoehe: f64) -> Self {
Rechteck {
breite: breite,
hoehe: hoehe,
} // wieder implizit
}
// Aufruf durch referenz.flaeche
// self (mit KLEINEM s) == this in Java
fn flaeche(&self) -> f64 {
self.hoehe * self.breite // auch implizit
}
fn skalieren(&mut self, s: f64) {
self.hoehe *= s;
self.breite *= s;
}
}

View File

@ -1,11 +1,12 @@
# Rust PR3 Repository # Rust PR3 Repository
In diesem Repo sind alle Unterlagen für die Präsentation der Programmiersprache Rust In diesem Repo sind alle Unterlagen für die Präsentation der Programmiersprache Rust
Das Repo beinhaltet: Das Repo beinhaltet:
- Dockerfile (TODO) - Dockerfile
- Basics (TODO) - Basics (TODO)
- Ownership und Borrowing - Ownership und Borrowing
- Pattern Matching und Enumerationen (TODO) - Pattern Matching und Enumerationen (TODO)
- Testing und Debugging (TODO) - Testing und Debugging (TODO)
- Advanced Features von Rust (TODO)
# Ablauf # Ablauf
1. Warum Rust, (welche Apps), welche Entwicklungsumgebung (ca. 10 Minuten) 1. Warum Rust, (welche Apps), welche Entwicklungsumgebung (ca. 10 Minuten)
@ -25,15 +26,28 @@ Das Repo beinhaltet:
8. Vorstellung Hausaufgabe (ca. 5 Minuten) 8. Vorstellung Hausaufgabe (ca. 5 Minuten)
# Aufgabenbereich # Aufgabenbereich
| Person | Aufgabenbereich | - Semih Uguz (3025014)
| ------- | ----------------------------------- | - B-basics
| Lukas | Präsentieren, 4 | - C-cargo
| Semih | Präsentieren, 3 | - Präsentieren
| Dominik | Präsentieren, 5, 6 | - Organisation des Repos
| Vincent | Präsentieren und 8, Endpräsentation | - Lukas Müller (3017761)
| Oliver | Hausaufgabe, DevContainer | - D-ownership
| Julian | Einleitung & 7 | - Präsentieren
- Live Coding
# Notizen - Oliver Stolle (3024383)
- Cheat Sheet erstellen - Dev Container
- Tests für die Hausaufgabe erstellen - Hausaufgabe
- Julian Lenz (3008505)
- Fakten und Anwendungen von Rust
- Cheat Sheet
- Präsentieren
- G-advanced
- Vincent Laux (3019006)
- Präsentieren
- Endpräsentation erstellen
- G-advanced
- Dominik Stuck (3018438)
- Präsentieren
- E-enums
- F-testing