Variablen initialisieren

Anfängerfragen zum Programmieren mit PureBasic.
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Variablen initialisieren

Beitrag von Drago »

Mal zwischendurch ne blöde Frage ( jedenfalls für die PROFIS ) :mrgreen:

Variablen einen Anfangswert zuweisen

So :

Code: Alles auswählen

EnableExplicit

Global x.i
Global y.i
Global time.f

Procedure InitVar()
  
  x = 10
  y = 20
  time = ElapsedMilliseconds()
  
EndProcedure

; u.s.w

InitVar()

; blabla


oder so :

Code: Alles auswählen

EnableExplicit

Procedure InitVar()
  
  Global  x.i = 10
  Global  y.i = 20
  Global time.f = ElapsedMilliseconds()
  
EndProcedure

; u.s.w

InitVar()

; blabla
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Variablen initialisieren

Beitrag von RSBasic »

Kommt drauf an, was du möchtest.

Lokale Definition und Initialisierung:

Code: Alles auswählen

EnableExplicit

Define abc=1

Debug abc
Globale Definition und Initialisierung (auch in Prozeduren verfügbar):

Code: Alles auswählen

EnableExplicit

Global abc=1

Debug abc
Oder Definition und Initialisierung nur in einer Prozedur:

Code: Alles auswählen

EnableExplicit

Procedure Test()
  Protected abc=1
  
  Debug abc
  
EndProcedure

Test()
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: Variablen initialisieren

Beitrag von Drago »

Wenn ich die Variablen auf ihren Ursprungswert zurücksetzen möchte,
declariere ich sie ja beim zeiten Beispiel zum zweiten mal als Global.
Darum geht es mir, ob das ok ist, oder nicht.
Das was du geschrieben hast, weis ich und ist mir auch klar.
Nur bei eben meinem Beispiel bin ich mir unsicher....
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Variablen initialisieren

Beitrag von STARGÅTE »

Ich mag die zweite Variante garnicht.
Grund: Sie vermittelt dem lesen der Eindruck, dass die Globalen Variablen nur dann existieren,
wenn InitVar() aufgerufen wurde. Statt desse wird die Globalisierung (nicht das Setzen des Werts) immer "ausgeführt",
wie dieses Beispiel zeigt, obwohl InitVar() nicht aufgerufen wurde.

Code: Alles auswählen

EnableExplicit

Procedure InitVar()
  Global Var.i = 10
EndProcedure

Procedure Test()
	Debug Var
EndProcedure

;InitVar()

Var = 1

Test()
Da also Global für eine Variable eh immer ausgeführt wird,
gehört es meiner Meinung nach auch immer außerhalb an den Anfang,
und zwar so weit vorne, wie nötig ist, dass EnableExplicit nicht meckert.
Die Wertsetzung kann dann in einer Prozedur erfolgen.

Ansonsten schließ ich mich RSBasic an.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: Variablen initialisieren

Beitrag von Drago »

Hm, Irgendwann und irgendwie muß ich ja die variablen declarieren, also
MUß ein InitVar() ja zumindestens einmal aufgerufen werden.
Außer ich möchte alles wieder auf den Anfangswert setzen.
Und dann ist doch alles so, wie es sein sollte.
Meine Frage ist nur, wenn ich die Variablen eben erneut initialisiere,
also ein zweites mal InitVar() aufrufe, ob es irgendwelche Nachteile
hat, bezüglich der nochmaligen globalisierung..
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Variablen initialisieren

Beitrag von STARGÅTE »

Nein, denn wie gesagt, das "Globalisieren" finden vorweg statt.
Das ist dann so, als ob alle Variablen die Global sind, ein Präfix bekommen würden.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: Variablen initialisieren

Beitrag von Drago »

Vielen Dank für euere Antworten...

LG Klaus
Benutzeravatar
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

Re: Variablen initialisieren

Beitrag von ts-soft »

Ich würde für mein ethische Syntaxempfinden dieses empfehlen:

Code: Alles auswählen

EnableExplicit

Global x.i = 10
Global y.i = 20
Global time.f = ElapsedMilliseconds()

Procedure ResetValues()
 
  x = 10
  y = 20
  time = ElapsedMilliseconds()
 
EndProcedure

; u.s.w

ResetValues()

; blabla 
1. Globale deklaration möglichst Top vom Source und nicht in einer Procedure
2. Die Procedure wird jetzt nur noch zum setzen der Defaultwerte genutzt.

Richtig ist natürlich alles, aber so findet man sich am besten zurecht, wenn man bei der
Deklaration gleich die DefaultWerte sieht, auch wenn diese jetzt doppelt im Source vorkommen,
weil das macht ja mal gar nichts :wink:
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.
Bild
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: Variablen initialisieren

Beitrag von Drago »

:lol: ethische Syntaxempfinden

Ich schmeiß mich weg.....
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Variablen initialisieren

Beitrag von Nino »

STARGÅTE hat geschrieben:Da also Global für eine Variable eh immer ausgeführt wird,
gehört es meiner Meinung nach auch immer außerhalb
... von Prozeduren.

Da kann ich mich nur anschließen. Ich wusste gar nicht, dass es überhaupt erlaubt ist, Global innerhalb von Prozeduren zu schreiben.

Grüße, Nino
Antworten