Funktion
-
Hallo,
soll man Funktionen auch schreiben wenn man damit erreicht dass das Programm übersichtlicher wird ? Ich dachte eigentlich funktionen sind dazu da mehrfach verwendete Programmteile nicht mehrfach schreiben zu müssen. Die Kosten für einen Funktionsaufruf sind sie überhaupt der Rede wert( Parameter auf stack sichern , Rücksprungadresse sichern usw )
-
blurry333 schrieb:
Hallo,
soll man Funktionen auch schreiben wenn man damit erreicht dass das Programm übersichtlicher wird ?
Ja, denn es erhöht die Wartbarkeit der Software.
hunderte von Zeilen nur in main() reinzudrücken, sollte man auf keinen Fall machen.
Da ist es besser Dinge in Funktionen auszulagern um mehr Übersicht zu erhalten.Beim erweitern und warten der Software kommt das dann zu Gute.
Ich dachte eigentlich funktionen sind dazu da mehrfach verwendete Programmteile nicht mehrfach schreiben zu müssen.
Das auch, früher zur Spagetticode Zeit war es die Hauptmotivation, bis man bemerkte, daß Funktionen auch die Wartung der Software verbessert.
Die Kosten für einen Funktionsaufruf sind sie überhaupt der Rede wert( Parameter auf stack sichern , Rücksprungadresse sichern usw )
Naja, durch Branch Prediction, großen 1st Level Cache und der Tatsache, daß die meiste Zeit die CPU eh am IDLEn ist und auf die Eingabe des Benutzers wartet, wird so etwas vernachlässigbar.
Lediglich in ganz wenigen Ausnahmen, wenn die CPU unter Volllast rechnen muß (z.b. Video enkodieren) kann es bei extremen Bottlenecks Sinn machen durch den Verzicht auf sich oft wiederholende Funktionen etwas Performance rauszukitzeln.
Aber solche Programme sind eher in der Minderheit und dem steht dann immer noch die schlechtere Wartbarkeit gegenüber, weswegen ich sagen würde, daß es nicht besonders sinnvoll ist.
Im Prinzip könnte man bei solchen Bottlenecks auch gleich in Assembler optimieren, die Wartbarkeit geht dann aber auch flöten.Software Engeneering & Wartbarer Code gehen heute ganz klar vor hoch auf Performance optimierten Code.
Das sieht man in der ganzen SW Branche.Man denke nur an HTML GUI Lösungen, anstatt native.
Java + .Net anstatt C und teilweise inzwischen auch C++.
Bevorzugung von Sprachen mit dynamischer Typisierung anstatt starker Typisierung.
Usw. da lassen sich dutzende Beispiele nennen.Von daher nein, auf das Auslagern in vielen Funktionen würde ich heute nicht mehr verzichten, wenn es der Wartbarkeit der Software dienlich ist.
-
PS:
Und schlaue Compiler dürften die Funktionsaufrufe vielleicht auch schon wegoptimieren können, so daß der Programmierer diese zwar im Quellcode stehen hat, im compilierten Binärcode dann aber nicht mehr viel davon zu sehen ist.