Was ist schönerer Code - return Wert alleinstehend oder mit Berechnung?


  • Mod

    Syntaktischer Zucker schrieb:

    hustbaer schrieb:

    Nur bevor ich

    int x = ...;
    x += 123;
    x = blah(x);
    ...
    

    schreibe, geb ich lieber jedem Zwischenergebnis einen neuen Namen.
    Weil's beim Code Lesen dadurch viel einfacher zu sehen ist was abgeht.

    Dann steigt aber auch der Speicherverbrauch.
    Und die Performance leidet ebenfalls darunter.

    Bei Variablen, die im Prinzip zum rechnen gleich weiterbenutzt werden, kann der Compiler z.B. dafür sorgen, das die in einem Register bleiben und das ist eben schneller, als wenn man den Wert wieder aus einer Speicheradresse holen müsste.
    Selbst mit 2nd Level Cache sind die Register schneller und seit AMD64 gibt's ja genug davon.

    Und das kann der Compiler im anderen Fall warum nicht?

    Ich habe übrigens noch eine Antwort auf deinen vorherigen Post in meinen vorherigen Post reineditiert (da ich ein Doppelposting vermeiden wollte), während du anscheindend schon wieder geantwortet hast.



  • Syntaktischer Zucker schrieb:

    hustbaer schrieb:

    Nur bevor ich

    int x = ...;
    x += 123;
    x = blah(x);
    ...
    

    schreibe, geb ich lieber jedem Zwischenergebnis einen neuen Namen.
    Weil's beim Code Lesen dadurch viel einfacher zu sehen ist was abgeht.

    Dann steigt aber auch der Speicherverbrauch.
    Und die Performance leidet ebenfalls darunter.

    Ach was. Wir sind doch nicht in der Compilersteinzeit. Gerade wenn man an SSA denkt, wird schnell klar, dass es für die Performance ziemlich egal ist, ob eine neue Variable eingeführt oder eine alte wiederverwendet wird.



  • SeppJ schrieb:

    Ich habe übrigens noch eine Antwort auf deinen vorherigen Post in meinen vorherigen Post reineditiert (da ich ein Doppelposting vermeiden wollte), während du anscheindend schon wieder geantwortet hast.

    Hab's jetzt gelesen.
    Also mir würde das += auffallen.



  • Ich bevorzuge einzeilige Funktionen mit direktem Rueckgabewert, solange die Zeile nicht zu lang wird.
    Das liegt daran, dass ich funktionale Sprachen sehr gerne mag und es da nur den Rueckgabewert gibt und gar keine anderen Moeglichkeiten, ausser man definiert sich mit where oder let irgendwelche zusaetzlichen Variablen hin.
    Ansonsten finde ich neue Variablen verwenden schoener, weil eine Variable eine feste Bedeutung haben sollte und sich die nicht veraendern sollte.



  • Syntaktischer Zucker schrieb:

    Also mir würde das += auffallen.

    Es ist nicht übersichtlich.
    Es irritiert.
    Mag sein dass es "auffällt", aber "auffällig" ist nicht unbedingt gut beim Lesen von Code. Übersichtlich ist besser.



  • SeppJ schrieb:

    Kellerautomat schrieb:

    ich finde die return += variante am besten, wuerde aber die unnoetigen klammern weglassen.

    *Schauder*

    Wer Nebeneffekte in Ausdrücken versteckt, der macht auch ... keine Ahnung, such dir was aus, dass du nicht leiden kannst 🙂

    Ich finde das nicht versteckt. Vielleicht ists nur mein trainiertes Auge, aber "return foo += expr;" ist m.M.n. ziemlich offensichtlich. Das einzige, was ich u.U. machen wuerde, ist eine Variable fuer expr einzufuehren.



  • Kellerautomat schrieb:

    Ich finde das nicht versteckt. Vielleicht ists nur mein trainiertes Auge, aber "return foo += expr;" ist m.M.n. ziemlich offensichtlich. Das einzige, was ich u.U. machen wuerde, ist eine Variable fuer expr einzufuehren.

    Übersehen w+rde och es wohl auch nicht. Aber das Konstrukt ist so selten, daß es meinen Lesefluss stört. Und es ist so nutzlos im Vergleich zu zwei lesbaren Zeilen kede mit einem Zweck, daß ich mich vielleicht drüber ärgere. Das wollen wir doch alle nicht.



  • volkard schrieb:

    Kellerautomat schrieb:

    Ich finde das nicht versteckt. Vielleicht ists nur mein trainiertes Auge, aber "return foo += expr;" ist m.M.n. ziemlich offensichtlich. Das einzige, was ich u.U. machen wuerde, ist eine Variable fuer expr einzufuehren.

    Übersehen w+rde och es wohl auch nicht. Aber das Konstrukt ist so selten, daß es meinen Lesefluss stört.

    Es ist doch nur selten, bei dem, der es nie nutzt.

    Ich nutze es ständig, ich bin nämlich schreibfaul und so ist gleich klar was gemeint ist.
    Bei so etwas wie:

    ergebnis = ergebnis + ...
    

    Muss man nämlich erstmal lesen, was das zweite Wort ist.
    Das mag bei so nem kurzen Wort wie ergebnis noch sofort auffallen.
    Aber bei Variablen mit Kamelcase, die es vielleicht deswegen auch in andere Form gibt, kann das schon wieder ganz anders aussehen.

    Und es ist so nutzlos im Vergleich zu zwei lesbaren Zeilen kede mit einem Zweck,

    Es ist nicht nutzlos.
    Wie schon gesagt, bei der anderen Variante muss man die zweite Variable erstmal lesen, das kostet Zeit, bei += ist sofort klar was gemeint ist.



  • Syntaktischer Zucker schrieb:

    volkard schrieb:

    Kellerautomat schrieb:

    Ich finde das nicht versteckt. Vielleicht ists nur mein trainiertes Auge, aber "return foo += expr;" ist m.M.n. ziemlich offensichtlich. Das einzige, was ich u.U. machen wuerde, ist eine Variable fuer expr einzufuehren.

    Übersehen w+rde och es wohl auch nicht. Aber das Konstrukt ist so selten, daß es meinen Lesefluss stört.

    Es ist doch nur selten, bei dem, der es nie nutzt.

    Ich nutze es ständig, ich bin nämlich schreibfaul und so ist gleich klar was gemeint ist.
    Bei so etwas wie:

    ergebnis = ergebnis + ...
    

    Muss man nämlich erstmal lesen, was das zweite Wort ist.
    Das mag bei so nem kurzen Wort wie ergebnis noch sofort auffallen.
    Aber bei Variablen mit Kamelcase, die es vielleicht deswegen auch in andere Form gibt, kann das schon wieder ganz anders aussehen.

    Und es ist so nutzlos im Vergleich zu zwei lesbaren Zeilen kede mit einem Zweck,

    Es ist nicht nutzlos.
    Wie schon gesagt, bei der anderen Variante muss man die zweite Variable erstmal lesen, das kostet Zeit, bei += ist sofort klar was gemeint ist.

    Nee! Es ging nicht um
    rau+=17;
    sondern um
    return rau+=17;


Anmelden zum Antworten