Code: Alles auswählen.
" fill me->structure if empty
me->structure = switch( me->structure-charfeld
when space then get_structure( )
else me->structure ).
Code: Alles auswählen.
" fill me->structure if empty
me->structure = switch( me->structure-numcfeld
when 0 then get_structure( )
else me->structure ).
Code: Alles auswählen.
"Check if structure is initial. If not: FILL IT!
struc1 = COND #( WHEN struc1 IS INITIAL THEN o_test->get( ) ).
"Check if instance created. If yes: get data
struc2 = COND #( WHEN o_test IS BOUND THEN o_test->get( ) ).
Oh, mit System hätte ich das nachgeguckt, wie ich das gemacht habe - daran, dass IS INITIAL ging, habe ich mich spontan gar nicht erinnert.ewx hat geschrieben:Die Idee ist gut.Ob ich das Coding allerdings trotz Einzeiligkeit besser finde, als ein schlichtes IF xxx IS BOUND oder IS INITIAL, weiß ich noch nicht.Code: Alles auswählen.
"Check if structure is initial. If not: FILL IT! struc1 = COND #( WHEN struc1 IS INITIAL THEN o_test->get( ) ). "Check if instance created. If yes: get data struc2 = COND #( WHEN o_test IS BOUND THEN o_test->get( ) ).
Code: Alles auswählen.
IF me->structure IS INITIAL. me->structure = get_structure( ). ENDIF.
me->structure = COND #( WHEN me->structure IS INITIAL THEN get_structure( ) ).
Code: Alles auswählen.
me->structure = COND #( WHEN me->structure IS INITIAL THEN get_structure( ) ELSE me->structure )
Böse Falle...!black_adept hat geschrieben:Da hier wurde kein ELSE angegeben wurde (wie in Ralfs Version ohne System) wird eine initiale Struktur zurückgeliefert wenn vorher was drin stand.
Das ist richtig, das entspricht meiner Gewohnheit, jede Anweisung in eine neue Zeile zu schreiben. Ein IF / ENDIF würde ich nie in eine Zeile schreiben. Da war ich etwas ungenau.black_adept hat geschrieben:@Ralf: Aber deine Aussage war "Sowas kriegt man per COND/SWITCH auf eine Programmzeile minimiert. "
Viel zu ungenau formuliert. Wenn es um eine "is initial"-Prüfung gehen sollte wäre die Antwort: "Sinnvollerweise gar nicht", da ein "is initial" auf die Hauptstruktur alle 5 Unterstrukturen auf "is initial" prüft.ralf.wenzel hat geschrieben:Kleine Denksportaufgabe: Angenommen, me->structure besteht aus fünf Unterstrukturen ustruc1....5 - wie kriegt man eine Prüfung aller Unterstrukturen per FOR in eine Programmzeile?
Richtig, ich möchte die Unterstruktur aber nur füllen, wenn sie leer ist - unabhängig davon, ob andere Unterstrukturen gefüllt sind oder nicht. Ein Prüfen der Hauptstruktur hilft also nicht.black_adept hat geschrieben:Viel zu ungenau formuliert. Wenn es um eine "is initial"-Prüfung gehen sollte wäre die Antwort: "Sinnvollerweise gar nicht", da ein "is initial" auf die Hauptstruktur alle 5 Unterstrukturen auf "is initial" prüft.ralf.wenzel hat geschrieben:Kleine Denksportaufgabe: Angenommen, me->structure besteht aus fünf Unterstrukturen ustruc1....5 - wie kriegt man eine Prüfung aller Unterstrukturen per FOR in eine Programmzeile?
Kann sich Ralf da nicht retten, indem er mit TRY arbeitet, im ELSE eine Ausnahme wirft und dann den CATCH-Block leer lässt? Dann wird die Zuweisung der Variablen an sich selber vermieden.black_adept hat geschrieben:Korrekt wäre also eine deutlich längere Syntaxwelche weiterhin dazu führt, dass im ELSE-Fall eine Wertzuweisung von me->structure an sich selbst durchgeführt wird.Code: Alles auswählen.
me->structure = COND #( WHEN me->structure IS INITIAL THEN get_structure( ) ELSE me->structure )
Code: Alles auswählen.
me->structure = COND #( WHEN me->structure IS INITIAL THEN get_structure( ) ELSE THROW zcx...- )
Klar geht das. Aber der Ausgangspunkt war, dass Ralf zu einem einfachen "IF... ENDIF" sagte: "Das kriege ich auch in eine Zeile" - und das hörte sich so an, als ob es danach übersichtlicher/kürzer/eleganter oder sonst wie wäre. Aber ehrlich gesagt sind alle bisher aufgetauchten Varianten eben das nicht.DeathAndPain hat geschrieben:Kann sich Ralf da nicht retten, indem er mit TRY arbeitet, im ELSE eine Ausnahme wirft und dann den CATCH-Block leer lässt? Dann wird die Zuweisung der Variablen an sich selber vermieden.black_adept hat geschrieben:Korrekt wäre also eine deutlich längere Syntaxwelche weiterhin dazu führt, dass im ELSE-Fall eine Wertzuweisung von me->structure an sich selbst durchgeführt wird.Code: Alles auswählen.
me->structure = COND #( WHEN me->structure IS INITIAL THEN get_structure( ) ELSE me->structure )