Rückgabewert von Klassen

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
Beiträge: 1482
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Rückgabewert von Klassen

Beitrag von Werner_Bayern » So, 06. Mai 2018 22:37

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?
es grüßt euch

Werner

ramses
1000 working lines a day
1000 working lines a day
Beiträge: 986
Registriert: Mi, 28. Jul 2010 17:16

Re: Rückgabewert von Klassen

Beitrag von ramses » Mo, 07. Mai 2018 7:23

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

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14477
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Rückgabewert von Klassen

Beitrag von brandelh » Mo, 07. Mai 2018 17:49

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.
Gruß
Hubert

Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: Rückgabewert von Klassen

Beitrag von Herbert » 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.
Grüsse Herbert
Immer in Bewegung...

Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
Beiträge: 1482
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Rückgabewert von Klassen

Beitrag von Werner_Bayern » Mo, 07. Mai 2018 22:52

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...
es grüßt euch

Werner

Antworten