Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Initialwert von Variablen?

35 views
Skip to first unread message

Remo Bernhardsgrütter

unread,
Sep 7, 2003, 6:34:52 PM9/7/03
to
Hallo NG,

mir ist aufgefallen, dass der Wert einer mit z.B.

<Dim Variable as Integer>

erzeugten Variabeln zu Beginn (noch bevor ich der Variable einen Wert
zuweise) immer den Wert 0 besitzt. Ist das GARANTIERT immer so, also ein
Feature von VB? Ich bin noch ziemlich Anfänger, und in meinen 5 Büchern über
VB wird diese Frage nicht beantwortet...

PS: Ich weiss natürlich auch, dass es ein schlechter Programmierstil ist,
wenn man im Programm Variablen keinen Startwert zuweist. Die Antwort der
obigen Frage interessiert mich dennoch.


Herfried K. Wagner [MVP]

unread,
Sep 7, 2003, 6:45:58 PM9/7/03
to
Hallo Remo!

"Remo Bernhardsgrütter" <remo.bernha...@bluewin.ch> schrieb:


> mir ist aufgefallen, dass der Wert einer mit z.B.
>
> <Dim Variable as Integer>
>
> erzeugten Variabeln zu Beginn (noch bevor ich der Variable
> einen Wert zuweise) immer den Wert 0 besitzt. Ist das
> GARANTIERT immer so, also ein Feature von VB?

Ja, das ist ein Feature von VB, wenn du es so haben willst.

> PS: Ich weiss natürlich auch, dass es ein schlechter Programmierstil
> ist, wenn man im Programm Variablen keinen Startwert zuweist.
> Die Antwort der obigen Frage interessiert mich dennoch.

Wenn man weiss, dass der Variablen automatisch ein bestimmter Wert
zugewiesen wird, dann ist es auch nicht allzuschlimm, wenn man diesen
nicht einen Anfangswert zuweist.

--
Herfried K. Wagner
MVP · VB Classic, VB .NET
http://www.mvps.org/dotnet


Thorsten Albers

unread,
Sep 7, 2003, 9:45:54 PM9/7/03
to
Remo Bernhardsgrütter <remo.bernha...@bluewin.ch> schrieb im
Beitrag <3f5bb338$1...@news.swissonline.ch>...

> erzeugten Variabeln zu Beginn (noch bevor ich der Variable einen Wert
> zuweise) immer den Wert 0 besitzt. Ist das GARANTIERT immer so, also ein
> Feature von VB? Ich bin noch ziemlich Anfänger, und in meinen 5 Büchern
über
> VB wird diese Frage nicht beantwortet...

Ja, das ist garantiert - mit den 'Besonderheiten' des jeweiligen
Variablen-Typ-Kontextes, d.h. daß z.B. eine Objektvariable nicht den Wert
'0' sondern 'Nothing' hat; ein String kann nicht den Wert '0' haben, das
Pendant wäre ein Leer-String; tatsächlich wird ein String aber mit einem
Null-String intialisiert (vbNullString), d.h. der String->Zeiger< hat den
Wert '0' (praktisch hat das aber keine große Bedeutung, Len(String) gibt in
diesem Falle auch '0' zurück, obwohl der String praktisch nicht existiert,
und der Vergleich If String = "" Then ist auch möglich).

> PS: Ich weiss natürlich auch, dass es ein schlechter Programmierstil ist,
> wenn man im Programm Variablen keinen Startwert zuweist. Die Antwort der
> obigen Frage interessiert mich dennoch.

Mach' Dir da keine Gedanken: Unter VB ist das kein schlechter Stil - dort
ist es im Gegenteil üblich, der Variable erst dann einen Wert zuzuweisen,
wenn ihr explizit ein bestimmter Wert zugewiesen werden kann. Wichtig ist
nur zu wissen, daß eine Variable, der noch kein Wert zugewiesen wurde, eben
automatisch von VB mit '0' etc. intialisiert wurde.

--
----------------------------------------------------------------------
THORSTEN ALBERS Universität Freiburg
albers@
uni-freiburg.de
----------------------------------------------------------------------

Peter Götz

unread,
Sep 8, 2003, 6:12:07 AM9/8/03
to
Hallo Remo,

> mir ist aufgefallen, dass der Wert einer mit z.B.
>
> <Dim Variable as Integer>
>
> erzeugten Variabeln zu Beginn (noch bevor ich der Variable einen Wert
> zuweise) immer den Wert 0 besitzt.

Das ist soweit richtig, aber ...

> Ist das GARANTIERT immer so, also ein
> Feature von VB? Ich bin noch ziemlich Anfänger, und in meinen 5 Büchern
über
> VB wird diese Frage nicht beantwortet...

Jein, es gibt dabei schon etwas nicht Unerhebliches zu beachten.
Du solltest Dich keineswegs darauf verlassen, dass Variablen innerhalb eines
Formmoduls nach dem Laden der Form leer sind, bzw. bei numerischen
Datentypen den Wert 0 haben.


Probiere mal nachfolgendes kleines Beispiel aus:

1 Form: Form1

1 Form: Form2
mit 1 Textbox: Text1
mit 1 CheckBox: Check1

' \\\ Code in Form1_____
Option Explicit

Private Sub Form_Click()
If Forms.Count < 2 Then
Form2.Show
Else
Unload Form2
End If
End Sub

' \\\ Code in Form2_____
Option Explicit

Private mNumber As Long

Private Sub Form_Load()
Text1.Text = CStr(mNumber)
Check1.Caption = "Variable löschen"
End Sub

Private Sub Form_Unload(Cancel As Integer)
If Check1.Value = vbChecked Then
Set Form2 = Nothing
End If
End Sub

Private Sub Text1_Change()
If IsNumeric(Text1.Text) Then
mNumber = CLng(Text1.Text)
End If
End Sub

' /// Ende Code

Starte das Programm

1) Auf Form1 klicken
2) Form2 wird sichtbar
3) In die Textbox der Form2 eine Zahl (z.B. 123) eingeben
4) Erneut auf Form1 klicken
5) Form2 wird entladen
6) Wieder auf Form1 klicken
7) Form2 erscheint wieder und ...

... wie man an der Textbox sieht, enthält die Variable mNumber nach dem
Erneuten Laden der Form2 immer noch den vorher in die Textbox eingegebenen
Zahlenwert, aber nicht, wie Du vielleicht erwartet hast, wieder den
ursprünglichen Wert 0.

8) Schreibe wieder eine Zahl in die Textbox _
und markiere die Checkbox.
9) Klicke erneut auf Form1, um Form2 wieder zu entladen.
10) Einneuer Klick auf Form1 lädt die Form2 wieder und ...

... nun hat mNumber wie erwartet den Wert 0, was auch die Textbox
entsprechend zeigt.

Du darfst nun selber herausfinden, warum die Variable mNumber sich in
Abhängigkeit von der Checkbox den in Ihr gespeicherten Wert mal merkt und
mal nicht. ;-)

Gruß aus St.Georgen
Peter Götz
p.g...@gssg.de
www.gssg.de (mit VB-Tips u. Beispielprogrammen)


Harald M. Genauck

unread,
Sep 8, 2003, 6:20:05 AM9/8/03
to
Hallo Remo,

> mir ist aufgefallen, dass der Wert einer mit z.B.
>
> <Dim Variable as Integer>
>
> erzeugten Variabeln zu Beginn (noch bevor ich der Variable einen Wert
> zuweise) immer den Wert 0 besitzt. Ist das GARANTIERT immer so, also ein
> Feature von VB? Ich bin noch ziemlich Anfänger, und in meinen 5 Büchern
über
> VB wird diese Frage nicht beantwortet...

Und die VB-Hilfe hat die Frage auch nicht beantworten können?

> PS: Ich weiss natürlich auch, dass es ein schlechter Programmierstil ist,

Nicht direkt "Programmierstil", aber schlecht ist es trotzdem, sich als
Einsteiger auf die Aussage von irgendwelchen Büchern zu verlassen, statt
die VB-Doku/-Hilfe zu Rate zu ziehen...
;-)

> wenn man im Programm Variablen keinen Startwert zuweist.

Da in VB die meisten Variablen automatisch mit der Deklaration bzw.
spätestens mit dem ersten lesenden Zugriff (auch wenn zuvor noch kein Wert
zugewiesen worden ist) initialisiert werden, ist es kein schlechter
Programmierstil, sondern völlig normal (wer etwas anderes behauptet, hat VB
nicht verstanden, und schreibt bloß seine Gewohnheiten aus einer anderen
Programmiersprache in VB-Syntax um). Die Zuweisung eines anderen Wertes als
des Initialisierungswertes sollte dann an passender Stelle im Code-Kontext
erfolgen.

Viele Grüße

Harald M. Genauck

ABOUT Visual Basic - das Webmagazin
http://www.aboutvb.de

0 new messages