Seite 1 von 1

Rückgabewert von Klassen

Verfasst: So, 06. Mai 2018 22:37
von Werner_Bayern
Servus,

hab mal eine grundsätzliche Frage. Wie macht ihr das:

Code: Alles auswählen

Method DatevImport:create()

if empty(::cDateiname)
   confirmbox(, "Sie haben keinen Dateinamen angegeben!", "Datev-Import", XBPMB_OK, XBPMB_CRITICAL)
   ::lFehler := .t.
   return self
endif
if .not. file(::cDateiname)
   confirmbox(, "Die Importdatei existiert nicht: " + ::cDateiname, "Datev-Import", XBPMB_OK, XBPMB_CRITICAL)
   ::lFehler := .t.
   return self
endif

return self
Soll ein create() einfach immer nur ein (unnützes ?) self zurückgeben? Ich finde das nicht elegant, weil man ja beim Objekt so abfragen muss, ob was schiefgelaufen ist:

Code: Alles auswählen

oDatev := Datevimport():new()
oDatev:cDateiname := "ichbineinungültiger Dateiname"
oDatev:create()

if oDatev:lFehler
   return
endif
Wäre ja elegant über den Rückgabewert von create() zu lösen, gibt einfach .t. oder .f. zurück.

Sollte jegliche GUI ausserhalb der Klasse stattfinden? Wie löst ihr das dann?

Re: Rückgabewert von Klassen

Verfasst: Mo, 07. Mai 2018 7:23
von ramses
Hallo Werner

darin bist du völlig frei. Du musst ja damit arbeiten.

Ich für mich handhabe es, mit wenigen Ausnahmen, konsequent so dass ausser der new() Methode jede Methode immer den Fehlerstatus (.t./.f.) zurückgibt.

Das hat zwar den Nachteil das keine obj:Create():open():doring() Konstrukte mehr möglich sind. Dafür ist die Fehlerbehandlung einfacher

Gruss Carlo

Re: Rückgabewert von Klassen

Verfasst: Mo, 07. Mai 2018 17:49
von brandelh
Wenn man weiter ableiten will, muss init und create self zurückgeben, ansonsten das wofür die Methode gedacht ist. Aber grundsätzlich geht alles.

Re: Rückgabewert von Klassen

Verfasst: Mo, 07. Mai 2018 22:12
von Herbert
Einerseits begründet Hubert die Sache, andereseits ist es so, dass du anschliessend auf die Existenz des aus der Klasse abgeleiteten Objektes prüfst und gut ist.

Re: Rückgabewert von Klassen

Verfasst: Mo, 07. Mai 2018 22:52
von Werner_Bayern
Herbert hat geschrieben: Mo, 07. Mai 2018 22:12 Einerseits begründet Hubert die Sache, andereseits ist es so, dass du anschliessend auf die Existenz des aus der Klasse abgeleiteten Objektes prüfst und gut ist.
Durch das init() existiert das Objekt ja bereits, erst das create() würde ein .f. zurückgeben...