| |
| modul:m323:learningunits:lu01:loesungen:paradigmendetektiv [2026/08/18 10:07] – Neue Loesung LU01.L08 - Paradigmen-Detektiv admin | modul:m323:learningunits:lu01:loesungen:paradigmendetektiv [2026/08/18 10:18] (aktuell) – Typografie korrigiert admin |
|---|
| ==== 1. Deklarativ und trotzdem zustandsverändernd ==== | ==== 1. Deklarativ und trotzdem zustandsverändernd ==== |
| |
| Ausschnitt 8 (''UPDATE''). Der Satz „deklarativ heisst seiteneffektfrei" ist **falsch**. Seiteneffektfreiheit ist eine Eigenschaft der //puren funktionalen// Programmierung, nicht der deklarativen Programmierung insgesamt. | Ausschnitt 8 (''UPDATE''). Die Behauptung, deklarativ sei automatisch seiteneffektfrei, ist **falsch**. Seiteneffektfreiheit ist eine Eigenschaft der //puren funktionalen// Programmierung, nicht der deklarativen Programmierung insgesamt. |
| |
| * **Deklarativ** heisst nur: das //Was// wird beschrieben, nicht das //Wie//. | * **Deklarativ** heisst nur: das //Was// wird beschrieben, nicht das //Wie//. |
| Ein ''UPDATE'' beschreibt zwar deklarativ, welche Zeilen betroffen sind – die Wirkung auf die Datenbank bleibt aber ein handfester Seiteneffekt. Mehr dazu in LU02 (Pure Functions). | Ein ''UPDATE'' beschreibt zwar deklarativ, welche Zeilen betroffen sind – die Wirkung auf die Datenbank bleibt aber ein handfester Seiteneffekt. Mehr dazu in LU02 (Pure Functions). |
| |
| ==== 2. ''sort()'' vs. ''sorted()'' ==== | ==== 2. sort() vs. sorted() ==== |
| |
| Ausschnitt 3 (''namen.sort()'') ist gefährlicher. Die Methode sortiert die Liste **an Ort und Stelle**. Jede andere Stelle im Programm, die dieselbe Liste referenziert, sieht ab sofort die veränderte Reihenfolge – auch dann, wenn sie auf die ursprüngliche Eingabereihenfolge angewiesen war. Solche Fehler treten oft erst weit entfernt von der Ursache auf und sind entsprechend mühsam zu finden. | Ausschnitt 3 (''namen.sort()'') ist gefährlicher. Die Methode sortiert die Liste **an Ort und Stelle**. Jede andere Stelle im Programm, die dieselbe Liste referenziert, sieht ab sofort die veränderte Reihenfolge – auch dann, wenn sie auf die ursprüngliche Eingabereihenfolge angewiesen war. Solche Fehler treten oft erst weit entfernt von der Ursache auf und sind entsprechend mühsam zu finden. |
| **Häufige Fehler in dieser Aufgabe** | **Häufige Fehler in dieser Aufgabe** |
| |
| * Ausschnitt 10 wird oft als imperativ eingestuft, weil ''lambda'' „nach Code aussieht". Entscheidend ist aber: Es wird keine Schleife geschrieben und kein Zwischenzustand aufgebaut. | * Ausschnitt 10 wird oft als imperativ eingestuft, weil ''lambda'' nach Code aussieht. Entscheidend ist aber: Es wird keine Schleife geschrieben und kein Zwischenzustand aufgebaut. |
| * Ausschnitt 1 und 2 werden korrekt getrennt, Ausschnitt 6 und 7 dann aber vergessen – dabei ist es dasselbe Muster mit einer Bedingung mehr. | * Ausschnitt 1 und 2 werden korrekt getrennt, Ausschnitt 6 und 7 dann aber vergessen – dabei ist es dasselbe Muster mit einer Bedingung mehr. |
| * Ausschnitt 8 wird als imperativ eingestuft, weil er etwas verändert. Verändern und //Wie//-Beschreiben sind aber zwei verschiedene Dinge. | * Ausschnitt 8 wird als imperativ eingestuft, weil er etwas verändert. Verändern und //Wie//-Beschreiben sind aber zwei verschiedene Dinge. |