Wieso benutzt man nicht einfach immer float und static bei Unity?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet
 wieso nutzt man bei den Variablen nicht einfach immer static

Vielleicht solltest du nochmal nachlesen, was static genau tut.

static besagt, dass die Variable der Klasse und nicht einem Objekt gehört.
Eine Klasse existiert genau einmal in EINER Instanz, ein Objekt hingegen kann beliebig oft instanziert werden und jedes dieser Objekte enthält die Variable mit eigenem Wert. Wäre dämlich, wenn man ein Objekt mehrfach braucht und die Eigenschaften an die Klasse gehängt hat....

INT repräsentiert eine Ganzzahl und ist damit immer exakt.
FLOAT hingegen ist schon mal eine ungefähre Annäherung an einen Wert, bedingt durch seine auf 7 Nachkommastellen begrenzte Genauigkeit.

Wofür willst du Nachkommastellen mitführen, wenn du sie für einen Wert gar nicht brauchst? Da nimmt man INT und gut ist. Schon wird auch Jahre später anhand der verwendeten Variablen noch deutlich, was in dem Code an Werten erwartet wird.


Palladin007  05.10.2024, 19:03

Ggf. nicht ganz offensichtlich:

Static birgt ein hohes Risiko für Seiteneffekte oder Race-Conditions, weil der Wert global ist und jederzeit von überall abgerufen oder geändert werden kann. Diese Probleme muss man explizit behandeln bzw. verhindern, was - je nach Projekt - durchaus erheblich komplex werden kann. Die Instanzen der Klasse bzw. ihre Werte können dagegen nur dort verwendet werden, wo die Instanz verfügbar ist.

INT bzw. die Berechnungen damit sind performanter, als FLOAT. Das mag für kleine Test-Projekte nicht relevant werden, wenn man aber - überspitzt dargestellt - 100e Werte von 10.000 NPCs permanent neu rechnen muss, dann wird das aber ganz schnell sehr wichtig.

Schon wird auch Jahre später anhand der verwendeten Variablen noch deutlich, was in dem Code an Werten erwartet wird.

Naja, ne :D

Ja, FLOAT führt eher zu mehr Verwirrungen, als wenn man einfach INT verwendet.
Aber nein, nur weil man INT verwendet, ist nicht deutlich, was das für ein Wert ist.
Das muss man immer noch durch z.B. gute Benennungen oder das Value-Object-Pattern deutlich machen.

Bei int und float sollte die Größe im Speicher mit 4 Bytes (32 bits) gleich sein. Falls float größer sein sollte, wäre das ein Argument für ein int. Wenn dann sehr viele Variablen in z.B. Objekten existieren, kann es einen sehr großen Unterschied machen.

Ein anderer wichtigerer Grund für int statt float für Ganzzahlen ist das Rechnen damit. Integer kann man sehr leicht addieren oder subtrahieren. Bei float ist es durch die IEEE-74 Darstellung nur schwerer möglich. Dazu gibt es externe Hardware, aber diese muss erstmal mit den Infos beladen werden. Kurzgefasst ist das Rechnen mit floats langsamer.

Bei float kann es auch zu Rundungsfehlern kommen. So ist z.B. 0,2 + 0,1 nicht 0,3.

Wenn der float also nur ganze Zahlen speichern soll, sollte auch ein Integer genutzt werden.