coalesce() [ERLEDIGT]

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

coalesce() [ERLEDIGT]

Beitrag von Manfred »

Hi,

beim Suchen in der Anleitung, bin ich auf die Funktion coalesce() gestossen. Neugierig wie ich bin, habe ich mal etwas gelesen, aber nichts wirklich kapiert. Kann mir jemand dazu etwas sagen?
Zuletzt geändert von Manfred am So, 08. Aug 2010 11:10, insgesamt 1-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: coalesce()

Beitrag von Tom »

Coalesce() liefert aus einer Reihe von Werten den ersten gültigen zurück. Statt mit z.B.:

Code: Alles auswählen

IF(!Empty(db->MonatsGehalt),db->MonatsGehalt,IF(!Empty(db->JahresGehalt),db->JahresGehalt/12,db->StundenGehalt*8*28))
für drei Gehaltsvarianten (Monat, Jahr, Stunde) in einer Tabelle anzeigen zu lassen, was der Mitarbeiter monatlich verdient, würde das mit Coalesce() so gehen:

Code: Alles auswählen

Coalesce(db->MonatsGehalt,db->JahresGehalt/12,db->StundenGehalt*8*28)
Ob das mit numerischen Werten so auch geht, weiß ich nicht, aber das soll wohl das Prinzip sein. Ich nutze die Funktion (bisher) nicht.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: coalesce()

Beitrag von Manfred »

ah,

Im Prinzip simuliert die Funktion intern die If Abfragen. Theoretisch hätte man auch eine eigene Funktion schreiben können. Aber wenn dem so ist, warum wird dann sowas "einfaches" extra als Funktion angeboten oder sieht es nur so einfach aus auf den ersten Blick?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: coalesce()

Beitrag von Tom »

Hallo, Manfred.

Viele Funktionen, die es in Xbase oder in 3rd-Party-Tools gibt, könnte man auch selbst schreiben. :wink:

Das Beispiel würde - ich hab's gerade getestet - aber wirklich nur mit leeren (numerischen) Feldern funktionieren. 0 (Null) ist ein "richtiger" Wert. Ein leerer Datensatz bei DBFNTX liefert aber für numerische Felder immer Null zurück, so dass Coalesce() auf jeden Fall das erste numerische Feld in der Auflistung "feuern" lassen würde.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: coalesce()

Beitrag von brandelh »

Hi Manfred,

nur weil etwas "einfach zu verstehen" ist oder "einfach selbst zu schreiben", kann es doch
mühsam sein es jedesmal schreiben zu müssen, somit ist das doch eine schöne Funktion ;-)

Nützlich für CodeBlocks() und vor allem, neuerdings können ja Felder auch NULL oder NIL liefern,
wenn du jetzt also immer eine IIF Verschachtelung schreiben willst ... zudem ist die sehr unübersichtlich
wenn mehr als 2 Verschachtelungen nötig sind.

Diese Funktion kann also einfach das Feld als ersten Begriff zurückgeben und einen
DEFAULT Wert an 2. Stelle ;-)
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: coalesce()

Beitrag von Manfred »

OK,

alles klar. Mich versteht wieder keiner...... :cry:

Ich wollte auch nur wissen, ob die Sache so einfach zu sehen ist, oder ob da etwas richtig deftiges hintersteckt, was ich auf Anhieb nicht sehe, oder gesehen habe. Sicherlich sind fertige Routinen, wenn sie hochoptimiert geschrieben sind, besser. Aber das war ja eigentlich nur meine Frage. Wir programmieren unsere Funktionen in Xbase++ und die Jungs vielleicht in einer schnelleren Sprache, die dann auch eine höhere Ausführung bringt (bringen könnte). Vielleicht auch nicht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: coalesce()

Beitrag von brandelh »

Manfred hat geschrieben:Wir programmieren unsere Funktionen in Xbase++ und die Jungs vielleicht in einer schnelleren Sprache, die dann auch eine höhere Ausführung bringt (bringen könnte).
so ist es ;-)
Manfred hat geschrieben:OK,
Vielleicht auch nicht.
ähhhmmmm, hast du mal ASORT() mit QUICKSORT in Xbase++ geschrieben vergliechen ?
Oder AScan() / StrTran() mit eigenen Funktionen ?

Da liegen Welten dazwischen !

Intern können die nämlich hoch optimierte C++ Routinen mit LONG Integern nutzen,
eventuell sogar auf Prozessorregister optimieren ... wir können das nicht :D
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: coalesce()

Beitrag von Tom »

Hallo, Manfred.

Ich verstehe Dich. 8)

Tatsächlich weiß man das nicht. Es gibt einige Xbase++-Funktionen, die in Xbase++ geschrieben sind, und andere wieder nicht. Dann hängt es zusätzlich davon ab, wie sie designed sind. Man kann alles auf langsame und auf optimale Art machen. Fragt sich, ob bei Funktionen wie Coalesce() oder Dingen wie Min() und Max() - die man ja auch simpel selbst bauen kann - tatsächlich ein Zeitgewinn drin oder draußen ist, wenn man es oder nicht selbst macht. :wink:
Herzlich,
Tom
Antworten