"Variable Viewer" immer leer?
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
>> dann kannst du sie per Define vordefinieren, und zwar in jedem geltungskreis extra,
Wobei Define in Proceduren keinen Sinn macht (gleichnamige Globale Variablen werden überschrieben) und Protected die bessere
Wahl ist.
// Nachtrag:
scheint geändert worden zu sein, ups
Wobei Define in Proceduren keinen Sinn macht (gleichnamige Globale Variablen werden überschrieben) und Protected die bessere
Wahl ist.
// Nachtrag:
scheint geändert worden zu sein, ups
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
hu?
wenn du eine einfache locale variable benutzen willst,
brauchst du im procedurenkopf ein Define, was ja eigentlich auch absolout logisch ist.
ich sprach weder von Global noch von Protected.
die ausgabe sollte deutlich machen, dass es sich um zwei getrennte locale variablen handelt.
versuch mal in diesem code eines der beiden Defines auszukommentieren...
wenn du eine einfache locale variable benutzen willst,
brauchst du im procedurenkopf ein Define, was ja eigentlich auch absolout logisch ist.
ich sprach weder von Global noch von Protected.
Code: Alles auswählen
EnableExplicit
Define n
Procedure Count()
Define n
For n=0 To 7
Debug "inner: "+Str(n)
Next
EndProcedure
For n=0 To 7
Debug "outer: "+Str(n)
Count()
Next
versuch mal in diesem code eines der beiden Defines auszukommentieren...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
danke für die Zusatztipps,
ich geha davon aus, daß global vereinbarte Variablen Projektweit gültig sind, auch in anderen Teilen als dem aktuellen Schnipsel. Was spricht dagegen, diese generell zu nehmen? Nur Ressourcen?
Ich habe kein Problem mit der Explicit-Vereinbarung, hatte ich ja in anderen Sprachen auch schon, eher erfreulich, daß man hier schneller zur Sache kommen kann. Aber ich bin gern bereit von alten Hasen zu lernen, noch dazu wenn diese sich mir gegenüber bemühen
ich geha davon aus, daß global vereinbarte Variablen Projektweit gültig sind, auch in anderen Teilen als dem aktuellen Schnipsel. Was spricht dagegen, diese generell zu nehmen? Nur Ressourcen?
Ich habe kein Problem mit der Explicit-Vereinbarung, hatte ich ja in anderen Sprachen auch schon, eher erfreulich, daß man hier schneller zur Sache kommen kann. Aber ich bin gern bereit von alten Hasen zu lernen, noch dazu wenn diese sich mir gegenüber bemühen
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
@Kaeru
Jetzt entspricht Define in Proceduren anscheinend dem Protected.
Das war nicht von Anfang an so, deshalb war ich beim Test verdutzt
// Edit
>> ich geha davon aus, daß global vereinbarte Variablen Projektweit gültig sind
Genau dadurch können die Fehler entstehen. Diese Variablen können von
überall geändert werden und enthalten evtl. garnicht den erwarteten Wert.
Alle Variablen, deren Gültigkeit nicht Projektweit erforderlich ist, sollte man
auch nicht Global deklarieren. Es ist immer besser weitgehend auf globale
Variablen zu verzichten, besser als Parameter übergeben, so das sie auch in
den entsprechenden Proceduren benutzbar sind.
Bei kleineren Projekten wird man Fehler noch vermeiden können, aber mit
zunahme an Programmzeilen wirds immer schwieriger
Jetzt entspricht Define in Proceduren anscheinend dem Protected.
Das war nicht von Anfang an so, deshalb war ich beim Test verdutzt
// Edit
>> ich geha davon aus, daß global vereinbarte Variablen Projektweit gültig sind
Genau dadurch können die Fehler entstehen. Diese Variablen können von
überall geändert werden und enthalten evtl. garnicht den erwarteten Wert.
Alle Variablen, deren Gültigkeit nicht Projektweit erforderlich ist, sollte man
auch nicht Global deklarieren. Es ist immer besser weitgehend auf globale
Variablen zu verzichten, besser als Parameter übergeben, so das sie auch in
den entsprechenden Proceduren benutzbar sind.
Bei kleineren Projekten wird man Fehler noch vermeiden können, aber mit
zunahme an Programmzeilen wirds immer schwieriger
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
-
- Beiträge: 476
- Registriert: 23.03.2005 23:19
Nicht zuletzt brauchts auch einfach weniger Speicher, wenn ich mit lokalen Variablen arbeite, vor allem wenn es größere Strukturen sind. Des weiteren finde ich es verwirrend, wenn ich für jede Prozedur, die eigentlich mit lokalen Variablen auskommen würde, globale nutzen würde. Um da ne Übersicht zu halten, müsste ich die Namensgebung wiederum an die Prozeduren anpassen und dann kann ich sie gleich in die Prozedur als lokale Variablen packen. Ich kommen in der Regeln mit <10 globalen Variablen aus.
Optimismus ist ein Mangel an Information.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
das hast du falsch aufgefasst.ts-soft hat geschrieben:Jetzt entspricht Define in Proceduren anscheinend dem Protected.
Das war nicht von Anfang an so, deshalb war ich beim Test verdutzt
Protected brauchst du, wenn du in einer Procedure einen Variablennamen als Local verwenden willst, der Global genutzt wird.
das kannst du nicht durch define ersetzen.
Code: Alles auswählen
Global test
Procedure gehts(plus)
Protected test
test + plus
Debug "inner:"+Str(test)
EndProcedure
test +2
Debug "outer:"+Str(test)
gehts(4)
Debug "outer:"+Str(test)
versuche, das Protected durch Define zu ersetzen, das gibt nen fehler.
Define dient dazu, eine Variable explizit zu definieren wie von EnableExplicit gefordert,
wenn sie nicht Global, Shared, Protected oder Static sein soll,
also eben eine stinknormale Locale Variable, die man garnicht explizit definieren würde,
wenn man nicht EnableExplicit benutzt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Also ist Protected doch besser geeignet. Weil wenns eine globale gleichen
Namen gibt und ich weiß das nicht, knallts unnötiger weise
Namen gibt und ich weiß das nicht, knallts unnötiger weise
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
-
- Beiträge: 476
- Registriert: 23.03.2005 23:19
Du kannst seit PB 4 direkt beim deklarieren der Variablen Werte zuweisen:Jet1199 hat geschrieben:Mein Miniprogramm ist also um zwei Zeilen gewachsen:Code: Alles auswählen
MessageRequester("Beispiel","a: "+Str(a)+" b: "+Str(b)+" a+b="+Str(a+b))
Code: Alles auswählen
Global a.l=1
Global b.l=2
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End