modul:m323:learningunits:lu07:aufgaben:purerefactoring

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
modul:m323:learningunits:lu07:aufgaben:purerefactoring [2026/09/09 11:14] – LU07.A06 - Unpure wird pure (neu) adminmodul:m323:learningunits:lu07:aufgaben:purerefactoring [2026/09/09 13:53] (aktuell) – Repo-Verlinkung korrigiert: nodisp im Footer statt Link im Text admin
Zeile 40: Zeile 40:
 </code> </code>
  
-==== Detaillierte Aufgabenstellung ====+==== Vorgehen ====
  
-  - Schreiben Sie einen Test, der die obige Abfolge und ihr Endergebnis festhält. +Führen Sie zuerst ''pytest'' ausSieben Tests sind **rot** das ist AbsichtDie Tests sind hier die SpezifikationZwei davon lohnen sich genauer anzuschauen:
-  - Bauen Sie einen **funktionalen Kern**: Funktionen, die den Bestand als Argument bekommen und einen **neuen** Bestand zurückgeben, ohne ihn zu mutieren und ohne ''print''. +
-  - Bauen Sie eine dünne **Schale**, in der Ausgabe und das Fortschreiben des Zustands stattfinden. +
-  - Nach dem Umbau darf im Kern kein ''global'', kein ''print'' und keine Mutation der Argumente vorkommen. +
-  - Belegen Sie mit Tests, dass der Kern pure istZweimal derselbe Aufruf mit demselben Bestand liefert dasselbe Ergebnis, und der übergebene Bestand ist danach unverändert.+
  
-==== Leitfragen ====+  * ''test_lauf_ist_wiederholbar'' - zwei Durchläufe liefern verschiedene Ergebnisse, weil der globale Zustand zwischen den Aufrufen hängen bleibt. 
 +  * ''test_lauf_ausgabe'' - schlägt fehl, sobald vorher ein anderer Test gelaufen ist. Genau das meint «Tests hängen voneinander ab». 
 + 
 +==== Zu implementieren ==== 
 + 
 +<code python> 
 +mit_einlagerung(bestand, artikel, menge) -> dict 
 +mit_entnahme(bestand, artikel, menge)    -> (dict, bool) 
 +</code> 
 + 
 +Beide Funktionen sind **pure**: 
 + 
 +  * Sie verändern ''bestand'' nicht, sondern geben einen neuen zurück. 
 +  * Sie geben nichts auf der Konsole aus. 
 +  * Derselbe Aufruf liefert immer dasselbe Ergebnis. 
 + 
 +''lauf()'' ist die Schale. Dort - und nur dort - leben Zustand, Protokoll und ''print''. Am Schluss existieren die globalen Variablen ''lager'' und ''protokoll'' nicht mehr; ''einlagern'' und ''entnehmen'' in ihrer alten Form auch nicht. 
 + 
 +==== Regeln ==== 
 + 
 +  * ''main_test.py'' wird **nicht** verändert. 
 +  * Rückgabewerte und Ausgabe von ''lauf()'' bleiben exakt gleich. 
 +  * Kein ''global'' im fertigen Code. 
 + 
 +==== Bewertung ==== 
 + 
 +^ Teil ^ Punkte ^ 
 +| Tests (''main_test.py'') | 14 | 
 +| pylint (''main.py'') | 5 | 
 + 
 +==== Leitfragen für die Reflexion ====
  
   * Wie gibt eine Funktion gleichzeitig den neuen Bestand und die Information «hat geklappt / hat nicht geklappt» zurück?   * Wie gibt eine Funktion gleichzeitig den neuen Bestand und die Information «hat geklappt / hat nicht geklappt» zurück?
Zeile 55: Zeile 81:
  
 ---- ----
 +<nodisp>https://github.com/templates-python/m323-lu07-a06-purerefactoring</nodisp>
 {{tag>M323-LU07 M323-D1I}} {{tag>M323-LU07 M323-D1I}}
 [[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi [[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi
  
  • modul/m323/learningunits/lu07/aufgaben/purerefactoring.1788945298.txt.gz
  • Zuletzt geändert: 2026/09/09 11:14
  • von admin