Algo Kurs Naechste Lernsituationen

Lektion 05 - JSON Speicherlogik

Pseudocode fuer JSON-Speicherung

JSON-Speicherung ist nicht nur Code. Dahinter steckt ein Ablauf: Daten laden, pruefen, veraendern und wieder speichern. Genau diesen Ablauf trainierst du hier als Algorithmus, bevor du ihn in JavaScript, Dart oder Flutter umsetzt.

1. Was ist die Aufgabe beim Speichern?

Beim Speichern geht es fast nie nur um "speichere irgendwas". Eine App muss entscheiden, ob schon Daten existieren, ob die Daten gueltig sind, was geaendert werden soll und wann erneut gespeichert wird.

Allgemeiner Speicher-Ablauf:
  Lade gespeicherte Daten
  Wenn keine Daten vorhanden sind:
    Erstelle Standarddaten
  Pruefe Daten
  Veraendere Daten
  Wandle Daten in JSON um
  Speichere JSON
  Gib Rueckmeldung

Merke: Speichern ist ein Ablauf mit Entscheidungen. Deshalb passt es perfekt zu Pseudocode und Programmablaufplanung.

2. Die wichtigsten Bausteine

BausteinFrage
LadenGibt es bereits gespeicherte Daten?
StandardwertWas passiert beim ersten Start?
PruefungSind Name, Punkte oder Listen gueltig?
AenderungWelche Daten werden veraendert?
SpeichernWann wird der neue Zustand dauerhaft gesichert?
FehlerfallWas passiert bei kaputtem JSON?

3. Pseudocode: User-Profil laden

Diese Situation ist sehr typisch: Eine App startet und moechte wissen, ob ein User schon gespeichert ist. Wenn nicht, wird ein Gastprofil erstellt.

Funktion ladeUserProfil:
  gespeicherterText = Lade Wert mit Schluessel "user"

  Wenn gespeicherterText nicht vorhanden ist:
    user = StandardUser mit Name "Gast", Punkte 0
    Gib user zurueck

  Wandle gespeicherterText von JSON in Daten um

  Wenn Daten ungueltig sind:
    user = StandardUser mit Name "Gast", Punkte 0
    Gib user zurueck

  user = Erstelle User aus Daten
  Gib user zurueck

Hier gibt es zwei wichtige Entscheidungen: Existieren Daten? Sind die Daten gueltig? Erst danach wird daraus ein richtiger User.

4. Pseudocode: Punkte erhoehen und speichern

Ein User schliesst eine Lektion ab. Die App soll Punkte erhoehen und den neuen Stand speichern.

Funktion lektionAbschliessen(lektionId):
  user = ladeUserProfil()

  Wenn user.erledigteLektionen enthaelt lektionId:
    Gib Meldung "Lektion war schon erledigt" aus
    Beende Funktion

  Fuege lektionId zu user.erledigteLektionen hinzu
  Erhoehe user.punkte um 10

  jsonText = Wandle user in JSON um
  Speichere jsonText mit Schluessel "user"

  Gib Meldung "Fortschritt gespeichert" aus

Der Schutz vor doppelten Lektionen ist wichtig. Sonst koennte ein User dieselbe Lektion mehrfach abschliessen und immer wieder Punkte bekommen.

5. Pseudocode: Aufgabenliste speichern

Eine Aufgabenliste besteht aus mehreren Aufgaben. Jede Aufgabe hat einen Titel und einen Status. Beim Speichern muss die komplette Liste gesichert werden.

Funktion speichereAufgaben(aufgabenListe):
  Wenn aufgabenListe leer ist:
    Speichere leere JSON-Liste
    Gib Meldung "Keine Aufgaben vorhanden" aus
    Beende Funktion

  Fuer jede aufgabe in aufgabenListe:
    Wenn aufgabe.titel leer ist:
      Gib Meldung "Aufgabe ohne Titel nicht erlaubt" aus
      Beende Funktion

  jsonText = Wandle aufgabenListe in JSON um
  Speichere jsonText mit Schluessel "tasks"
  Gib Meldung "Aufgaben gespeichert" aus

6. Pseudocode: Aufgabe als erledigt markieren

Diese Aufgabe trainiert Suchen in einer Liste. Die App muss die richtige Aufgabe finden, ihren Status aendern und danach die Liste speichern.

Funktion markiereAufgabeErledigt(gesuchterTitel):
  aufgabenListe = ladeAufgaben()
  gefunden = false

  Fuer jede aufgabe in aufgabenListe:
    Wenn aufgabe.titel gleich gesuchterTitel ist:
      aufgabe.erledigt = true
      gefunden = true

  Wenn gefunden gleich false ist:
    Gib Meldung "Aufgabe nicht gefunden" aus
    Beende Funktion

  speichereAufgaben(aufgabenListe)
  Gib Meldung "Aufgabe erledigt gespeichert" aus

Die Variable gefunden merkt sich, ob die Suche erfolgreich war. Ohne diese Variable wuesstest du nach der Schleife nicht sicher, ob etwas geaendert wurde.

7. Fehlerfaelle planen

Gute Speicherlogik denkt auch an Fehler. Daten koennen fehlen, leer sein, falsch aufgebaut sein oder doppelt vorkommen.

FehlerfallAlgorithmische Reaktion
Kein SpeicherstandStandarddaten erstellen.
Kaputtes JSONFehler abfangen und Standarddaten nutzen.
Leerer NameSpeichern abbrechen oder Ersatzname nutzen.
Doppelte IDNicht hinzufuegen, sondern vorhandenen Eintrag aktualisieren.
Negative PunkteAuf 0 setzen oder Eingabe ablehnen.

8. Deine Aufgaben

  1. Schreibe Pseudocode fuer ladeAufgaben().
  2. Plane, was passiert, wenn gespeichertes JSON kaputt ist.
  3. Schreibe Pseudocode fuer addTask(title).
  4. Schreibe Pseudocode fuer deleteTask(id).
  5. Schreibe Pseudocode fuer resetProgress().
  6. Zeichne fuer lektionAbschliessen einen Programmablaufplan.
Weiter zu JSON Lernsituationen