![]() |
AW: Maßeinheiten als Typen
Zitat:
Anlehnend an die SI Einheiten, in der i.d.R. auch zusammengesetzte Formeln berechnet werden, heist das die Typen rechnen immer richtig. Lediglich bei der Ein- und Ausgabe will der "Mensch" halt gerne mal was anderes sehen :stupid: Rollo |
AW: Maßeinheiten als Typen
Zitat:
Delphi-Quellcode:
var
A: TKiloGramm; B: TGramm; begin A := 50; B := A; // compiliert ohne irgendwelche Konvertierungen, dun dun dunnn :( |
AW: Maßeinheiten als Typen
@Ghostwalker
Vielleicht solltest Du ein wenig ausholen und uns sagen was der Hintergrund Deiner Frage ist. Grundsätzlich würde ich mit einem Record arbeiten:
Delphi-Quellcode:
Gruß
Type
tEinheit=(mgr,gr,kg,ton); tMyrec=record Menge:integer; Einheit:tEinheit; end; K-H |
AW: Maßeinheiten als Typen
Zitat:
Zitat:
|
AW: Maßeinheiten als Typen
Das mit der direkten Zuweisung von verschiedenen Maßeinheiten ist eher Kontraproduktiv. Den dann wärs ja wieder möglich, bei Verwendung als Methoden-Parameter, bei Gramm, Kilogramm zu übergeben.
Das läst sich aber umgehen, in dem man statt Implizierter Typumwandlung die Explizite Variante wählt. Was mich allerdings irretiert ist, wo der Vorteil liegen soll, das ganze in einem Typ zu handhaben. @p80286 siehe 1 Post und Verweis auf anderen Thread :) Ursprünglich wollte ich für jede Maßeinheit (als Beispiel hab ich Gewichte genommen) einen eigenen eigenen Record definieren mit entsprechenden Operatoren und Convertierungen. Im anderen Thread ging es darum, ob man entsprechende Unittests generieren kann. Dabei kamm die Frage auf, ob das wirklich das beste Design ist (also einzelne Typen für Maßeinheiten), da es doch recht aufwendig ist. Da das ganze mit der Unittest-Frage nur indirekt zu tun hab, hab ich das ganze mal abgekapselt. |
AW: Maßeinheiten als Typen
Zitat:
Du musst nur verstehen das Kilogramm, Gramm, Mikrogramm, Nanogramm K E I N E verschiedenen Maßeinheiten sind. Es ist immer ein und dieselbe Maßeinheit mit verschiedenen Vorsätzen. Ich wiege gleichzeitig 100 kg = 100000 g = 100000000000000 ng. Das kann man mit einem einzigen Typen abbilden. |
AW: Maßeinheiten als Typen
Ich hab gestern zufällig einen Vortrag (Java, sorry) gehört über eine "JSR-354 Money and Currency API".
Grundprinzip war in etwa, das Geld jeweils aus einem Betrag und einer Währung besteht und alles jeweils Objekte sind, mit diversen Eigenschaften und Methoden. Dazu gibt es Umrechnungsobjekte von Währungen usw. Was ich damit sagen will: Wenn man es schon kompliziert und ausführlich machen will, mit viel Overhead, dann aber auch alles richtig als Objekte abgebildet mit Typsicherheit usw. (auch wenn Delphi nicht Java ist, kann man sich da ja was abgucken). |
AW: Maßeinheiten als Typen
Zitat:
Also Kg, ng, gr, m, cm, dm sind nur verschiedene Faktoren, das ist leicht. Aber es gibt auch Ausreisser, z.B. bei Temperatur (°C, °F, °K), das muss man mit Offset und Faktor arbeiten. Oder bei Winkeln und Längen in diversen Darstellungsformen, z.B. der worst case ist wohl in USA mit der grässlichen inch-feet Darstellung und Brüchen derselben. Rollo |
AW: Maßeinheiten als Typen
@Rollo62
Egal wie komplex die Umrechung ist, die Bedeutung bleibt aber immer dieselbe, egal in welcher Dimension ich diese Einheit darstelle/angebe. Es wird nicht heißer oder kälter wenn ich die Temperatur(-Differenz) in Celsius, Kelvin oder Fahrenheit angebe. Es wird nicht schwerer oder leichter wenn ich das Gewicht in Kilogramm, Tonnen oder Mikrogramm angebe. Der TE hat es aber bislang nicht geschafft auch nur ansatzweise eine Begründung zu liefern, warum er diese Aufsplittung einer Einheit in unterschiedliche Dimensions-Typen als nötig erachtet. Es kommt nur ein "ja, wenn man das mal braucht". |
AW: Maßeinheiten als Typen
Zitat:
Einzig Operatoren würde ich außen vor lassen. Addition und Subtraktion sind vllt. noch machbar, aber bei Multiplikation&Division wirds schwierig: Bspw. muss das Multiplikationsergebnis aus Spannung und Stromfluss vom Divisionsergebnis aus Drehmoment durch Zeit subtrahierbar sein. Guava macht das ganze übrigens ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz