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

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

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

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