Hallo,
ich habe mal eine grundsätzliche Fragen:
Gegeben sind 8 Variablen (3 Integer, 5 Double), diese werden in einem
Menü am Display angezeigt und können alle nach dem gleichen Schema
geändert werden. Jede Variable besitzt einen anderen Wertebereich, eine
andere Stelle, an der sie angezeigt wird und eine andere Einheit.
Nun habe ich für jede Variable folgende Funktionen deklariert:
-konvertiere_Var1() //wandelt den Wert von int bzw. double in char für
die Ausgabe um
-zeige_aktiv_an_Var1() //Zeigt den aktuellen Wert zum Ändern bereit
an
-zeige_inaktiv_an_Var1() //Zeigt den aktuellen Wert deaktiviert an
-setze_Var1() //Wertet den Zähler aus und Ändert den Wert der
Variablen1
Nun meine Frage;
Ist es schlimm, wenn ich diese Funktionen für jede Variable extra
programmiert habe, oder optimiert das sowieso der Compiler?
Für mich ist es einzeln übersichtlicher und die einzelnen Funktionen
sind ja auch schön kurz, aber ich weiß nicht ob es nicht professioneller
wäre, allgemeine Funktionen zu schreiben und als Übergabeparameter den
Variablentyp anzugeben. Obwohl in diesem Falle müsste ich in den
einzelnen Funktionen ja doch wieder mit einer Switch-Case-Anweisung
(o.ä.) im Endeffekt (fast) den gleichen Code schreiben und würde mir nur
ein paar Konvertierungen einsparen.
Wie seht ihr das?
Ja, das ist schlimm, dafür einzelne Funktionen zu schreiben. Besser
einfach alle einstellbaren Werte deklarativ definieren, da das auch die
Wartung später vereinfacht:
Man könnte für "value" auch noch ein union verwenden, um tatsächlich
"int" und "double" als Wert zu verwenden, aber das macht dann die
Initialisierung nicht so einfach. Und der Compiler müsste dann
"designated initializer list" unterstützten, was leider nicht alle
können.
Theo schrieb:> Ist es schlimm, wenn ich diese Funktionen für jede Variable extra> programmiert habe,
"Schlimm" gibt es dabei gar nicht. Es ist alles eine Frage der
Sichtweise, und wie du dein Programm strukturierst. Wichtig ist nur, daß
du es strukturierst.
Du kannst deine Anzeige"objekte" als eben solche Objekte sehen, und
diese haben dann alle ihre eigenen Funktionen zur Darstellung und
Umrechnung.
Man kann aber auch, wie Frrank Buss, sich gedanklich ein "Anzeigeobjekt"
erstellen, welches dann alle Funktionen für die Anzeige bereitstellt.
Was jetzt besser oder schlechter ist, ist zum Teil Geschmackssache.
Falls du ein grafisches Display benutzt, und da auch noch Icons oder
"analoge" Anzeigen verwenden willst, hat dein Ansatz seine Vorteile, bei
reinem Text der von Frank.
Theo schrieb:> oder optimiert das sowieso der Compiler?
Eher nicht.
Oliver
Theo schrieb:> Gegeben sind 8 Variablen (3 Integer, 5 Double),> Ist es schlimm, wenn ich diese Funktionen für jede Variable extra> programmiert habe,
Wenn ich dich richtig verstanden habe, dann hast du zb
1
intMinute;
2
intStunde;
3
intSekunde;
und Funktionen geschrieben
1
voidkonvertiere_Minute();
2
voidkonvertiere_Stunde();
3
voidkonvertiere_Sekunde();
Ja, das ist in der Tat schlimm, denn es zeigt, dass du noch nicht
verstanden hast, dass Funktionen nicht konzeptionell auf Variablen
losgelassen werden, sondern auf Werte.
In Minute, in Stunde, in Sekunde steht jeweils ein Wert drinnen. Und
dieser Wert ist immer gleich zu behandeln - er muss konvertiert werden.
Dazu schreibt man sich 1 Funktion, die weiß, wie man mit Werten dieses
Typs umgeht
1
voidkonvertiere_Int(intWert)
2
{
3
...
4
}
und benutzt die dann, um bei Bedarf den Wert in der Variablen Minute
1
konvertiere_Int(Minute);
oder den Wert in der Variablen Stunde
1
konvertiere_Int(Stunde);
oder eben den Wert in der Variablen Sekunde
1
konvertiere_Int(Sekunde);
bearbeiten zu lassen.
Mir scheint, du bist in deinen Studien bei Funktionen angelangt, aber
den Schritt hin zu allemeinen Funktionen, die über Argumente die Werte
bekommen mit denen sie operieren sollen, den hast du noch nicht
vollzogen.
Wobei ich zugeben muss, dass die übliche Programmierweise auf einem µC
mit vielen globalen Variablen diesen Schritt auch nicht gerade fördert.