Seite 2 von 2

Re: Variablen initialisieren

Verfasst: 18.03.2012 18:54
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 

Re: Variablen initialisieren

Verfasst: 18.03.2012 19:22
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.

Re: Variablen initialisieren

Verfasst: 18.03.2012 19:30
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. ;)

Re: Variablen initialisieren

Verfasst: 18.03.2012 19:38
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

Re: Variablen initialisieren

Verfasst: 18.03.2012 19:52
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:

Re: Variablen initialisieren

Verfasst: 18.03.2012 20:10
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

Re: Variablen initialisieren

Verfasst: 18.03.2012 20:14
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.

Re: Variablen initialisieren

Verfasst: 18.03.2012 20:28
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

Re: Variablen initialisieren

Verfasst: 18.03.2012 22:36
von ts-soft
Nino's Variante finde ich sehr gut :allright: