Local Variablen und deren Lebensdauer

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von Manfred »

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!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Local Variablen und deren Lebensdauer

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von georg »

Guten Morgen,


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
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:

Code: Alles auswählen

FUNCTION Main()
   Local nEvent, mp1, mp2, oXbp
   mEvent := xbe_None
   WHILE nEvent <> xbeP_Close
      nEvent := AppEvent(@mp1, @mp2, @oXbp
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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Local Variablen und deren Lebensdauer

Beitrag von Jan »

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

Code: Alles auswählen

LOCAL dummy
geschrieben habe, und nicht ein

Code: Alles auswählen

LOCAL dummy := NL
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:

Code: Alles auswählen

LOCAL nEvent := 0
LOCAL mp1    := NIL
LOCAL mp2    := NIL
LOCAL oXbp   := NIL
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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
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

Beitrag von brandelh »

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.
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
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

Beitrag von ramses »

Jan hat geschrieben: Mo, 13. Jul 2020 10:40 Ich setze grundsätzlich schon seit Jahren alle /w-Schalter. Also auch /wi. Aber noch nie hat der bei mir gemeckert das ich ein
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
Antworten