Variablen initialisieren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Variablen initialisieren

Beitrag von RSBasic »

@ts-soft
Ist es nicht sinnvoller, deine Variablen nur einmal zu initialisieren/mit Standardwerten zu setzen? Mal angenommen, du möchtest später "x" standardmäßig auf "20" setzen. Dann müsstest du das immer zweimal im Code ändern.
Also dann lieber so:

Code: Alles auswählen

EnableExplicit

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

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

ResetValues() ;Erste Initialisierung

; u.s.w

ResetValues() ;Später fürs Zurücksetzen

; blabla 
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
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 »

@RSBasic
Es geht mir ja nicht darum Deine Faulheit :mrgreen: zu unterstützen, sondern um das Wiederfinden.
Wenn in der globalen Deklaration bereits der Defaultwert zu ersehen ist, ist das Suchen der Procedure unnötig,
was bei längeren Sourcen, wo die vielleicht in einer Include ist, die garnicht geladen ist, usw.
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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Variablen initialisieren

Beitrag von RSBasic »

@ts-soft
Mir gehts eher darum, um die Wartbarkeit des Quellcodes zu gewährleisten. Wenn man gleiche Sachen (in dem Fall Initialisierung und erneutes Setzen der Standardwerte) in verschiedenen/mehreren Bereichen ändern muss (mehrfach), dann ist es für mich nicht wartungsfreundlich. ;)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Variablen initialisieren

Beitrag von Nino »

RSBasic hat geschrieben:@ts-soft
Mir gehts eher darum, um die Wartbarkeit des Quellcodes zu gewährleisten. Wenn man gleiche Sachen (in dem Fall Initialisierung und erneutes Setzen der Standardwerte) in verschiedenen/mehreren Bereichen ändern muss (mehrfach), dann ist es für mich nicht wartungsfreundlich. ;)
Für mich ist das auch nicht wartungsfreundlich.
Das Problem ist v.a., dass man dann nämlich in einigen der Bereiche das Ändern vergessen kann, wodurch sich die Fehleranfälligkeit erhöht.

Grüße, Nino
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 »

Dann machste es eben so:

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

ResetValues() ;Erste Initialisierung

; u.s.w

ResetValues() ;Später fürs Zurücksetzen

; blabla
Obwohl das Kommentarzeichen kann auch weggelassen werden, auf jeden Fall sehe ich im Kopf des Sources
was normal sein sollte, auch wenn die Werte gleich wieder gesetzt werden. Ich möchte auf jeden Fall nicht
extra in der Procedure suchen, die Erläuterung des Defaultwertes gehört in den Kopf zu der globalen Variable,
da beißt die Maus den Faden nicht ab. Was ist wichtiger? Wartbarkeit oder Dokumentation?
Wenn es dadurch bei euch zu mehr Fehlern kommt, dann macht es eben anders oder geht lieber
Cola trinken :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
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Variablen initialisieren

Beitrag von Nino »

ts-soft hat geschrieben:Dann machste es eben so:
... oder man benutzt besser symbolische Konstanten.
ts-soft hat geschrieben:Was ist wichtiger? Wartbarkeit oder Dokumentation?
Ich sehe hier keinen Zielkonflikt.
U.a. trägt auch angemessene Dokumentation zu einer guten Wartbarkeit bei. Eine angemessene Dokumentation ist aber kein Grund, die Wartbarkeit durch andere "Aktionen" wieder zu verschlechtern. ;-)
ts-soft hat geschrieben:Wenn es dadurch bei euch zu mehr Fehlern kommt, dann macht es eben anders
Es kommt dadurch nicht nur "bei uns" zu mehr Fehlern, sondern auch bei vielen anderen Programmierern. Grund sind bekannte menschliche Schwächen. Daher gilt es allgemein als schlechter Programmierstil, eine Information an mehreren Stellen im Programm zu hinterlegen.
ts-soft hat geschrieben:oder geht lieber Cola trinken :wink:
... während du spezielle "ts-soft-Drinks" bevorzugst?

Grüße, Nino
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Variablen initialisieren

Beitrag von RSBasic »

Alternative:

Code: Alles auswählen

EnableExplicit

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

Global x_default.i = x
Global y_default.i = y
Global time_default.f = time

Procedure ResetValues()
 
  x = x_default
  y = y_default
  time = time_default
 
EndProcedure

; u.s.w

ResetValues()

; blabla 
Einziger Nachteil: Verbraucht doppelt so viel an Speicher, aber dafür nur einmalige Wertzuweisung.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Variablen initialisieren

Beitrag von Nino »

Ich würde -- wie gesagt -- symbolische Konstanten bevorzugen ( dafür sind sie da, oder? ;-) ). So wird auch kein doppelter Speicher verbraucht.

Code: Alles auswählen

EnableExplicit

#x_default = 10
#y_default = 20

Global x.i = #x_default
Global y.i = #y_default


Procedure ResetValues()
 
  x = #x_default
  y = #y_default
 
EndProcedure

; u.s.w

ResetValues()

; blabla 
Grüße, Nino
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 »

Nino's Variante finde ich sehr gut :allright:
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
Antworten