Local Variablen und deren Lebensdauer
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Local Variablen und deren Lebensdauer
wobei jetzt eine weitere Frage auftaucht: Ist es ratsam direkt beim Deklarieren der/den Variable(n) einen/den Wert zuzuordnen, oder sollte das egal sein, wann es erfolgt? Unter gewissen Umständen meckert der Compiler ja schon direkt, aber dann wieder nicht. Unterschiede scheint es da ja zu geben!?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Jan
- Marvin
- Beiträge: 14651
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Local Variablen und deren Lebensdauer
Manfred,
vor einigen Jahren erzählte mal jemand (von Alaska?) das es immer sinnvoll sei, Variablen auch immer sofort mit einem Wert zu versehen. Ich weiß nicht mehr was der Grund dafür war. Aber anscheinend KANN es Nebenwirkungen geben wenn eine Variable so wertfrei im Raum steht.
Ich weiß, das ist sehr vage. Vielleicht weiß ja Hubert mehr dazu. Oder Frank, wenn der mal wieder um die Ecke kommt.
Auf jeden Fall mache ich es grundsätzlich, das ich Variablen direkt bei der Deklaration auch initialisiere. Je nach dem, was die Variable machen soll, mit "", 0, {}, .F., oder NIL. Das ist bei mir zur festen Angewohnheit geworden, die für mich den Code auch übersichtlicher macht. Auch beim Debuggen.
Wann meckert denn der Compiler, wenn kein Wert zugewiesen worden ist? Kenn ich gar nicht so.
Jan
vor einigen Jahren erzählte mal jemand (von Alaska?) das es immer sinnvoll sei, Variablen auch immer sofort mit einem Wert zu versehen. Ich weiß nicht mehr was der Grund dafür war. Aber anscheinend KANN es Nebenwirkungen geben wenn eine Variable so wertfrei im Raum steht.
Ich weiß, das ist sehr vage. Vielleicht weiß ja Hubert mehr dazu. Oder Frank, wenn der mal wieder um die Ecke kommt.
Auf jeden Fall mache ich es grundsätzlich, das ich Variablen direkt bei der Deklaration auch initialisiere. Je nach dem, was die Variable machen soll, mit "", 0, {}, .F., oder NIL. Das ist bei mir zur festen Angewohnheit geworden, die für mich den Code auch übersichtlicher macht. Auch beim Debuggen.
Wann meckert denn der Compiler, wenn kein Wert zugewiesen worden ist? Kenn ich gar nicht so.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2824
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 95 Mal
- Danksagung erhalten: 13 Mal
Re: Local Variablen und deren Lebensdauer
Guten Morgen,
es gibt einen Compiler-Schalter, der das macht: /wi
In diesem Beispiel führt der Schalter /wi dazu, dass die Verwendung von mp1, mp2 und oXbp in der letzten Beispielzeile moniert werden: sie werden verwendet, bevor ihnen explizit ein Wert zugewiesen wurde. Wir als Programmierer wissen, dass das so gewollt ist und kein Problem ergibt.
Auf der anderen Seite "schützt" dieser Schalter aber auch vor nicht initialisierten Variablen, oder - und das findet ich wichtiger - Tippfehlern:
Hier würde es einen Monite für die WHILE-Anweisung geben, weil - aufgrund eines Tippfehlers - eine nicht-existente Variable mit einem Wert beschickt wurde.
Also, das gibt es, und ist - je nach Programmierstil und Fingerfertigkeit - ganz nützlich.
es gibt einen Compiler-Schalter, der das macht: /wi
Code: Alles auswählen
FUNCTION Main()
Local nEvent, mp1, mp2, oXbp
nEvent := xbe_None
WHILE nEvent <> xbeP_Close
nEvent := AppEvent(@mp1, @mp2, @oXbp
Auf der anderen Seite "schützt" dieser Schalter aber auch vor nicht initialisierten Variablen, oder - und das findet ich wichtiger - Tippfehlern:
Code: Alles auswählen
FUNCTION Main()
Local nEvent, mp1, mp2, oXbp
mEvent := xbe_None
WHILE nEvent <> xbeP_Close
nEvent := AppEvent(@mp1, @mp2, @oXbp
Also, das gibt es, und ist - je nach Programmierstil und Fingerfertigkeit - ganz nützlich.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- Jan
- Marvin
- Beiträge: 14651
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Local Variablen und deren Lebensdauer
Georg,
Ich setze grundsätzlich schon seit Jahren alle /w-Schalter. Also auch /wi. Aber noch nie hat der bei mir gemeckert das ich ein
geschrieben habe, und nicht ein
Das mag in Deinem Beispiel anders sein. Da hier auch noch die Nutzung mitspielt. Was auch den Unterschied in den Beobachtungen von Manfred ausmachen könnte.
Allerdings ist Dein Beispiel bei mir auch irrelevant. Da bei mir dann am Funktionsbeginn stände:
So wie ich Manfred verstanden habe geht es auch eher weniger darum. Sondern darum, ob es sinnvoll oder sogar notwendig ist, Variablen grundsätzlich mit einem Startwert zu versehen.
Jan
Ich setze grundsätzlich schon seit Jahren alle /w-Schalter. Also auch /wi. Aber noch nie hat der bei mir gemeckert das ich ein
Code: Alles auswählen
LOCAL dummy
Code: Alles auswählen
LOCAL dummy := NL
Allerdings ist Dein Beispiel bei mir auch irrelevant. Da bei mir dann am Funktionsbeginn stände:
Code: Alles auswählen
LOCAL nEvent := 0
LOCAL mp1 := NIL
LOCAL mp2 := NIL
LOCAL oXbp := NIL
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Local Variablen und deren Lebensdauer
Hallo ...
eigentlich ist es egal ... dem Compiler ... solange er nicht erkennt, dass du eine Variable nutzt, ohne eine explizite Zuweisung.
ABER für den Entwickler und seinen Vertreter ist es die einzig richtige Vorgehensweise sofort oben NACH der LOCAL Angabe (ohne was) die Zuweisung zu machen.
Denn auch mir passiert es immer wieder, eine kleine Änderung und ein TYPE Error kommt (0 <> NIL, .t. <> NIL) etc. .... irgendeine Abzweigung vergisst man immer.
Wenn man oben .t. oder 1 oder 0 zuweißt, erkennt jeder welcher Typ eigentlich richtig ist.
eigentlich ist es egal ... dem Compiler ... solange er nicht erkennt, dass du eine Variable nutzt, ohne eine explizite Zuweisung.
ABER für den Entwickler und seinen Vertreter ist es die einzig richtige Vorgehensweise sofort oben NACH der LOCAL Angabe (ohne was) die Zuweisung zu machen.
Denn auch mir passiert es immer wieder, eine kleine Änderung und ein TYPE Error kommt (0 <> NIL, .t. <> NIL) etc. .... irgendeine Abzweigung vergisst man immer.
Wenn man oben .t. oder 1 oder 0 zuweißt, erkennt jeder welcher Typ eigentlich richtig ist.
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2513
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Local Variablen und deren Lebensdauer
Hallo Jan
der meckert erst wenn du die Variable ohne vorherige Zuweisung abfragts.
z.B.
a := test() --> OK
test(a) --> NOK
Welcher Datentyp (C,N,L ...) dann verwendet wird nicht geprüft.
Valar Morghulis
Gruss Carlo
Gruss Carlo