Einzelnen Beitrag anzeigen

cltom

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#1

Variablen doppelt (float und str) verwalten?

  Alt 18. Feb 2022, 10:45
Delphi-Version: XE2
Hallo,

eine Stil- oder Effizienz-Frage und eigentlich ein klassisches Thema. Man hat einen Haufen Variablen in einer Klasse, vorwiegend double, integer, einige wenige Strings (hier nicht relevant). Für das User-Interface, die Ausgabe, etc. braucht man eine String-Version der Variablen. Also FloatToStr/F. Dazu noch eine Umwandlung von SI in die passende Einheit (die Variablen liegen alle in SI vor, das UI stellt dem User passende Einheiten zur Verfügung).

Im Grunde braucht es also sinngemäß so etwas:

  edt_Value.Text := FloatToStrF(RoundTo(ConvertFromSI(SomeClass.Value, SomeClass.TargetUnit), -2); Alles gut soweit.

Nun braucht man den oben erzeugten String (konvertiert und gerundet) an anderer Stelle nochmals, etwa in einem StringGrid.

So, jetzt stellt sich die Frage:

a) den gleichen Befehl von oben im Grunde rüberkopieren
b) den String einmal erstellen und als weitere Variable in der Klasse mitführen
c) eine eigene Klasse nur mit den Strings erzeugen
d) den String von dort kopieren, wo er schon erzeugt ist
e) für jede Variable eine eigene Funktion bauen, die sie als String zurückgibt.
f) die Königslösung: eine generelle Funktion bauen, die eine beliebige Variable als String zurückgibt

a) hat den augenscheinlichen Nachteil, dass Code vervielfacht wird. Da die Konvertierung von Einheiten über einen Datenbank-Zugriff geht, wird das auch etwas Performance kosten, weil mehrere hundert Zugriffe für alle Umrechnungsfaktoren aus der DB gelesen werden, und das dann eben zwei- oder mehrfach.
b) hat den (ebenso offensichtlichen) Nachteil, dass jede Variable zweifach erzeugt wird, einmal der Originalwert (double, integer), einmal seine nach SI konvertierte, gerundete string-Fassung und die Klasse recht aufgeblasen wird.
c) räumt den letzteren Nachteil auf und hat damit den Vorteil, dass ich das Objekt mit den Originaldaten übergeben kann.
d) funktioniert nicht, da nicht alle Variablen gleichzeit im UI verfügbar sind.
e) machbar, erscheint mir aber auch nicht beliebig elegant.
f) wär ideal, bloß wie? Der Funktion müsste man eine beliebige Variable übergeben können. Vielleicht übersehe ich was, aber ich seh nicht, wie das gehen sollte.

Habt ihr andere Idee? Danke im Voraus!

Geändert von cltom (18. Feb 2022 um 10:55 Uhr)
  Mit Zitat antworten Zitat