Rückgabewert von Klassen

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Rückgabewert von Klassen

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

Werner

<when the music is over, turn off the lights!>
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Rückgabewert von Klassen

Beitrag 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
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Rückgabewert von Klassen

Beitrag 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.
Gruß
Hubert
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Rückgabewert von Klassen

Beitrag 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.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Rückgabewert von Klassen

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

Werner

<when the music is over, turn off the lights!>
Antworten