Wann ist initialisieren sinnvoll?

MinaM

Mitglied
Hallo Zusammen,

ich habe die Frage, wann man eine Variable schon beider der Deklaration initialisieren sollte,
und wann es besser ist der Variable erst später einen Wert zuzuweisen?

grüße
MinaM
 
Hi,
ich halte es für sinnvoll und einen sauberen Programmierstil, Variablen entweder direkt bei der Deklaration oder spätestens im Konstruktor (je nach Sinn und Möglichkeit) zu initialisieren.

Dazu eine kleine Info am Rande:
Ich beschäftige mich derzeit damit, alten Fortran-Code auf einen aktuellen Compiler zum Laufen zu bringen. Der alte Code weist kaum Initialisierungen auf, wurde von dem damaligen Compiler oder OS gesetzt. Bei dem neuen Compiler steht hingegen irgendein Wert in der Variablen, was zu merkwürdigen Ergebnissen führt, wenn auf sie zugegriffen wird, ohne dass sie vorher noch belegt wurden.
Beispiel:
Code:
INTEGER einint
.
DO I=1,10
einint = einint + 1
END DO
Ergebnis alte Maschine/Compiler: einint = 10
Ergebnis neue Maschine/Compiler: gute Frage, aber alles andere als 10. Auf der Testmaschine ungefähr im Bereich 10^39.
 
Hallo!

Hallo Zusammen,

ich habe die Frage, wann man eine Variable schon beider der Deklaration initialisieren sollte,
und wann es besser ist der Variable erst später einen Wert zuzuweisen?

grüße
MinaM
Das kommt drauf an, wo du die Variable verwenden willst. Instanz- und Klassenvariablen braucht man nicht explizit zu initialisieren, sie werden "automatisch" mit ihrem jeweiligen "default"-Wert intialisiert. Wenn der default-Wert in der jeweiligen Situation passt, braucht man hier also nichts mehr zu tun. Als final deklarierte Klassen- oder Instanzvariablen müssen in jedem Fall initialisert werden, nicht unbedingt bei der Deklaration jedoch spätestens im Konstruktor.

Lokale Variablen (die innerhalb eines eigenen Blocks definiert sind bsp. einem Methodenblock) werden hingegen nicht automatisch initialisiert.

Weiterhin ist es in der Regel guter Stil Variablen erst dann zu definieren wenn sie wirklich gebraucht werden. Eine Variable, die nur von einer Methode verwendet wird braucht beispielsweise nicht als Instanzvariable definiert zu sein. Werden in einer Methode mehrere lokale Variablen verwendet, so sollte man diese nicht in einem großen Block zu beginn der Methode sondern erst jeweils dann, wenn die Variable wirklich zum Einsatz kommt definieren.

Gruß Tom
 
//offtopic
@snape Kenne mich in Fortran zwar nicht aus, aber wird deine
Variable nicht in jedem Fall initialisiert (im Schleifenkopf)
Somit Erg alte Maschine = 10
Erg neue Maschine = 10 (nur eine Mutmassung) :)

Gruß

RedWing
 
varibalen immer mit einen Wert belegen, wenn sie später nicht irgendwie überschrieben wird.
Beispiel:

int a;

dann kommt irgednwas und dann
a = b;

braucht man ja nicht a noch oben = 0 oder sonst was zu setzen.

Genauso in Fortran:

INTEGER i

DO i = 1, 10, 1

ENDDO

Sinnlos hier i nochmals vorher einen Wert zuzuweisen.

Aber
INTEGER i

i = i +1

Ja woher soll der Rechner nun wissen was i ist? unter Windows wird bei den meinsten Compiliern 0 gesetzt standartmässig. aber in Linux kommt da ein krummer wert.

Genauso bei den Beispiel von Snape. er setzt nur i fest aber nicht das einint. Somit ist es kein Wunder, dass er bei verschiedenen Machinen verschiedene Werte bekommt.
Wenn du sichergehen willst, setze immer die Variablen mit einen Wert. Bei Manchen Compiliern in C wird das sogar verlangt, dass man den Variablen gleich einen Wert zuweist. Bei Manchen Profs aber ist es nicht schön, wenn man einer Variable einen Wert zuweist die sowieso mit einen anderen später überschrieben wird. Also konstanten wert und nicht mit sich selbst + irgendwas.

Bis dann
Bis dann!
 
Upsala dann hab ich glaube was überlesen
I und einInt sind nicht dieselbe Variable :-(

Sorry about that...

Gruß

RedWing
 
nick2005 hat gesagt.:
Genauso in Fortran:

INTEGER i

DO i = 1, 10, 1

ENDDO

Sinnlos hier i nochmals vorher einen Wert zuzuweisen.

Aber
INTEGER i

i = i +1

Ja woher soll der Rechner nun wissen was i ist? unter Windows wird bei den meinsten Compiliern 0 gesetzt standartmässig. aber in Linux kommt da ein krummer wert.
Führe mich nun mal als Wortklauber auf aber Snape schrieb:
Snape hat gesagt.:
INTEGER einint
DO I=1,10 einint = einint + 1
END DO

Bei Snapes Problem ist es ganz einfach er hat vergessen der Variable einint einen Initialisierungswert zu zuweisen und einen nicht so mächtigen Compiler benutzt wie auf seiner alten Maschine. Wenn ich mal wild spekuliere ist es irgendein Wert aus dem Speicher. ;)
Wir Javaverwöhnten können uns manch eine Unsauberkeit leisten aber wenn man auch mal (wie ich) in C arbeiten muss gewöhnt man sich schnell an bei der Deklaration der Variable gleiche eine Zuweisung zu machen. Ich habs mir angewöhnt und es hat mir manch einen ärger in der Zeigerarithmetik erspart ;-)

Gruß

Luxor
 
Zurück