Kurze Stilfrage zu Variablen



  • Hallo!

    Ich habe eine ganz kurze Frage, was sinnvollerer/besserer Programmierstil ist:

    - möglichst wenige Variablen verwenden, z.B. eine "Hilfsinteger" erstellen, die dann überall wieder einer eingesetzt wird, wo ich kurz mal einen Wert speichern muss (um Speicherplatz zu sparen)

    oder

    - stets eine eigene Variable für jede kleine Rechnung mit aussagekräftigem Namen erstellen (so dass immer klar ist, was sie genau tut)

    Gibt's da eine generelle Empfehlung?

    Viele Grüße,
    GoldenAge



  • Wenn Jmd anders den Code lesen sollte, wäre es mMn besser mehrere Hilfsvariablen zu verwenden, weil derjenige vmtl mehrfach nachsehen würde ob nicht doch ein bestimmter Grund besteht, warum man die selbe Variable später wieder verwendet.
    Code-Interpretationen sind tw nicht sehr einfach.

    Wenn man Speicher sparen muss, sieht es aber wieder anders aus.



  • GoldenAge schrieb:

    Hallo!

    Ich habe eine ganz kurze Frage, was sinnvollerer/besserer Programmierstil ist:

    - möglichst wenige Variablen verwenden, z.B. eine "Hilfsinteger" erstellen, die dann überall wieder einer eingesetzt wird, wo ich kurz mal einen Wert speichern muss (um Speicher zu sparen)

    oder

    - stets eine eigene Variable für jede kleine Rechnung mit aussagekräftigem Namen erstellen (so dass immer klar ist, was sie genau tut)

    Gibt's da eine generelle Empfehlung?

    Ja. Die Empfehlung ist, eigene Variablen mit aussagekräftigen Namen zu verwenden. Sonst wundert man sich beim späteren Lesen des Codes warum die selbe Variable mit nichtssagendem Namen für völlig verschiedene Dinge benutzt wird. Wenn du Variable A ab einem bestimmten Punkt nicht mehr benutzt und dafür eine Variable B vom gleichen Typ erst ab einem späteren Zeitpunkt benutzt, kannst du dich ggf. sogar auf die Optimierungsfähigkeiten des Compilers verlassen, dass er beide Variablen in den selben Speicherbereich legt. Du kannst ihn aber auch darin unterstützen, indem du den Scope der Variablen mit entsprechenden Blöcken begrenzt:

    void f()
    {
      /* ... */
      {
         int meineErsteVariable;
         /* ... */
      }            //Scope-Ende von meineErsteVariable
      /* ... */
      {
         int wasAnderes;
         /* ... */
      }
      /* ... */
    }
    

    Das solltest du allerdings auch nicht zu exzessiv betreiben, da das sonst auch wieder nur verwirrt. Außerdem ist so ein scoping häufig auch ein Hinweis darauf, dass du den entsprechenden Block als eigene Funktion auslagern kannst, die der Compiler dann wiederum je nach Gusto inlinen darf.
    Allgemein gilt hier wie immer: Hüte dich vor premature optimization. Lieber den Platz für ein oder zwei Variablen mehr verschwenden als den Code unleserlicher oder schwerer zu verstehen machen.



  • Danke, das war wirklich hilfreich! 👍



  • Neben den beschriebenen (Vermeidung von wiederverwerteten Variablen) rate ich dir ohnehin dazu, tendenziell kleine Funktionen/Methoden zu verwenden.

    Aus kurzen Funktionen/Methoden folgen ohnehin:
    a) Die Frage nach einer Variablenwiederverwertung entfällt meist.
    b) Kleine Funktionen sind leichter zu ändern/warten.
    c) Code kann eher wiederverwertet werden.

    Wobei diese Regel nur dann gilt wenn man gleichzeitig möglichst auf globale Variablen verzichtet (was man ohnehin weitgehend machen sollte).



  • GoldenAge schrieb:

    - möglichst wenige Variablen verwenden, z.B. eine "Hilfsinteger" erstellen, die dann überall wieder einer eingesetzt wird, wo ich kurz mal einen Wert speichern muss (um Speicherplatz zu sparen)

    Ob das wirklich Speicher spart? Compiler sind ganz gut darin, die Lebenszeit von Variablen zu erkennen (das ist essentiell für die Verteilung von Variablen auf Register). Solange man nicht irgendwie höchstmögliche Klarheit fürs Debuggen braucht spricht überhaupt nichts dagegen, dass der Compiler für mehrere Variablen, deren effektive Lebenszeiträume sich nicht überlappen, denselben Speicherbereich benutzt.


Anmelden zum Antworten