feat: content import system - Markdown parser, importer, 7 decks + 3 tutorials + 5 cheatsheets
Dieser Commit ist enthalten in:
Ursprung
1c59b667f2
Commit
6a504254b0
17 geänderte Dateien mit 2658 neuen und 0 gelöschten Zeilen
102
edu/content/flashcards/deck-gotchas.md
Normale Datei
102
edu/content/flashcards/deck-gotchas.md
Normale Datei
|
|
@ -0,0 +1,102 @@
|
|||
# Flashcard Deck: Gotchas & Haeufige Fehler
|
||||
|
||||
**Thema**: Typische Fallen und wie man sie vermeidet
|
||||
**Karten**: 15
|
||||
|
||||
---
|
||||
|
||||
## Karte 1 | Kritisch
|
||||
**Q:** Warum liefert meine Berechnung manchmal unerwartet 0 oder leer?
|
||||
**A:** NULL-Propagation! Wenn IRGEND ein Wert in einem Ausdruck NULL ist, wird das GANZE Ergebnis NULL. Loesung: Immer vorher auf NULL pruefen mit `isnull(lVar)` oder `nullValuesWhenORtestedBecomeZero` setzen.
|
||||
|
||||
---
|
||||
|
||||
## Karte 2 | Kritisch
|
||||
**Q:** Ich rufe eine Methode auf, aber sie wird nicht gefunden. Warum?
|
||||
**A:** Die Methode ist wahrscheinlich auf der SUPERKLASSE definiert. Omnis-Klassen erben Methoden. Pruefe: `oSuperData`, `T_Super`, `wMainWindow`, `wBaseWindow`. Auch: Tippfehler im $-Methodennamen!
|
||||
|
||||
---
|
||||
|
||||
## Karte 3 | Kritisch
|
||||
**Q:** Mein `lList.spalte` gibt immer leer zurueck. Warum?
|
||||
**A:** Die Liste hat keine aktuelle Zeile gesetzt (`$line = 0`). Setze zuerst `$line`: `Do lList.$line.$assign(1)` oder nutze `For each line in list`.
|
||||
|
||||
---
|
||||
|
||||
## Karte 4 | Kritisch
|
||||
**Q:** `Do $cinst.$objs.feld.$contents = "Test"` funktioniert nicht. Warum?
|
||||
**A:** Man kann Notation-Properties NICHT mit `=` setzen! Immer `$assign()` verwenden: `Do $cinst.$objs.feld.$contents.$assign("Test")`. Das ist DER haeufigste Anfaengerfehler!
|
||||
|
||||
---
|
||||
|
||||
## Karte 5 | Wichtig
|
||||
**Q:** Mein Remote Form reagiert traege. Warum?
|
||||
**A:** Jeder `$event()` macht einen Server-Roundtrip! Loesung: Validierung und UI-Logik in `$eventclient()` (Browser-seitig) ausfuehren. Nur Datenbankzugriff im Server-Event.
|
||||
|
||||
---
|
||||
|
||||
## Karte 6 | Wichtig
|
||||
**Q:** Mein SQL mit `[lVar]` erzeugt seltsame Fehler bei Sonderzeichen. Warum?
|
||||
**A:** `[lVar]` macht direkte Text-Substitution - Apostroph im Namen -> SQL-Fehler oder SQL-Injection! Immer `@[lVar]` (Bind-Variable) oder `:1`-Parameter verwenden!
|
||||
|
||||
---
|
||||
|
||||
## Karte 7 | Wichtig
|
||||
**Q:** Meine Aenderungen an einer Variable werden in einem anderen Window nicht sichtbar. Warum?
|
||||
**A:** Variable-Scoping! `lVar` (lokal) lebt nur in der Methode. `iVar` (Instanz) nur im Objekt. Fuer fenster-uebergreifend: `tVar` (Task) verwenden oder Daten explizit uebergeben.
|
||||
|
||||
---
|
||||
|
||||
## Karte 8 | Wichtig
|
||||
**Q:** Ich habe eine Klasse geaendert, aber die Aenderung wirkt sich nicht aus. Warum?
|
||||
**A:** Moeglicherweise laeuft noch eine alte Instanz! Schliesse alle offenen Fenster/Instanzen und oeffne neu. Oder: Die Methode ist auf der Superklasse und du aenderst die falsche Klasse.
|
||||
|
||||
---
|
||||
|
||||
## Karte 9 | Mittel
|
||||
**Q:** Warum zaehlt `$linecount` von 1 und nicht von 0?
|
||||
**A:** Omnis-Listen sind 1-basiert (wie VB, anders als JS/Python). `$line = 1` ist die ERSTE Zeile. `$line = 0` bedeutet "keine Zeile gewaehlt".
|
||||
|
||||
---
|
||||
|
||||
## Karte 10 | Mittel
|
||||
**Q:** Mein `$search` findet nichts, obwohl der Wert existiert. Warum?
|
||||
**A:** String-Vergleich ist Case-Sensitive in Omnis! `"Harry" <> "harry"`. Loesung: `Do lList.$search(upp(lList.name) = upp(lSearchTerm))` oder `low()` verwenden.
|
||||
|
||||
---
|
||||
|
||||
## Karte 11 | Mittel
|
||||
**Q:** Was passiert wenn ich `Calculate lList as lOtherList` mache?
|
||||
**A:** Du bekommst eine KOPIE, keine Referenz! Aenderungen an `lList` aendern `lOtherList` NICHT. Das ist anders als bei Arrays in JavaScript!
|
||||
|
||||
---
|
||||
|
||||
## Karte 12 | Mittel
|
||||
**Q:** Mein `$sendall` wirft einen Fehler bei leeren Listen. Warum?
|
||||
**A:** `$sendall` auf eine leere Liste ist eigentlich ok, aber wenn der Ausdruck auf Spalten zugreift die nicht existieren, kommt ein Fehler. Immer vorher pruefen: `If lList.$linecount > 0`.
|
||||
|
||||
---
|
||||
|
||||
## Karte 13 | Fortgeschritten
|
||||
**Q:** Mein `Quit method` gibt nichts zurueck, obwohl ich einen Wert angebe. Warum?
|
||||
**A:** Der Aufrufer muss `Returns lVar` verwenden! Ohne `Returns` geht der Rueckgabewert verloren: `Do iObj.$method() Returns lResult` (richtig) vs `Do iObj.$method()` (Wert geht verloren).
|
||||
|
||||
---
|
||||
|
||||
## Karte 14 | Fortgeschritten
|
||||
**Q:** In Solution2: Warum sehe ich einen Datensatz mit `valid = false`?
|
||||
**A:** Soft-Delete! `valid = false` bedeutet "geloescht" aber noch in der DB. Immer `WHERE valid = true` in Abfragen verwenden. Solution2 nutzt `valid` konsequent statt physischem DELETE.
|
||||
|
||||
---
|
||||
|
||||
## Karte 15 | Fortgeschritten
|
||||
**Q:** Mein Report druckt leere Seiten. Warum?
|
||||
**A:** Die Report-Klasse hat keine Daten! Reports brauchen eine definierte Liste als Datenquelle (`$dataname`). Pruefe: Wurde die Liste vor dem Report-Aufruf korrekt befuellt?
|
||||
|
||||
---
|
||||
|
||||
## Spaced Repetition Tracking
|
||||
|
||||
| Karte | Zuletzt | Naechste | Schwierigkeit |
|
||||
|-------|---------|----------|---------------|
|
||||
| (wird beim Ueben gefuellt) | | | |
|
||||
Laden …
Tabelle hinzufügen
Einen Link hinzufügen
In neuem Issue referenzieren