[Sammelthread] Spaghetticodeschnitzel

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    [Sammelthread] Spaghetticodeschnitzel

    Beispiel von Trade:

    C-Quellcode

    1. static int isNegative(float arg)
    2. {
    3. char *p = (char*) malloc(20);
    4. sprintf(p, "%f", arg);
    5. return p[0] == '-';
    6. }

    Und meine Antwort darauf:

    C-Quellcode

    1. static bool isNegative(float arg)
    2. {
    3. return ((byte*)&arg)[0] & 0x80 == 0x80
    4. }


    Hinweis: Ich meine hier nicht solche Codes wie in [Sammelthread] VB-Sprüche
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Ich möchte auch die Gelegenheit nutzen, um dieses unsinnige Codeschnipsel zu analsyieren, welches ich hin und wieder sehe:

    Quellcode

    1. // life motto
    2. if (sad() === true) {
    3. sad().stop();
    4. beAwesome();
    5. }

    Da hier der ===-Operator verwendet wird, muss es sich um PHP oder JavaScript handeln. Ruby hat auch so einen Operator, aber Ruby hat eine andere Syntax. Da in Zeile 4 camelCase verwendet wird, handelt es sich eher um JavaScript, denn in PHP wird typischerweise snake_case verwendet.

    Zeile 2:
    Generell gilt: Das Vergleichen von Booleans mit True in einem If-Statement ist schlechter Stil. Man könnte hier argumentieren, dass der Inhalt des Blocks auch dann übersprungen werden soll, wenn etwas zurückgegeben wird, was kein Boolean ist (z.B. der String "1"), aber das wäre ebenfalls schlechter Stil dahingehend, dass sad doppeldeutige Werte zurückgibt.

    Zeile 3:
    In JavaScript kann kein Wert === true sein und gleichzeitig eine Eigenschaft stop besitzen. Bzw. anders gesagt: true hat keine Eigenschaft namens stop.
    In PHP ist es möglich, zwei Funktionen aufzurufen, eine Stringverknüpfung auf den Ergebnissen durchzuführen, und das als Statement so stehen zu lassen. Wenn es also eine weitere Funktion namens stop gibt, ist dieser Code syntaktisch korrekt, ergibt aber trotzdem keinen Sinn.

    Fazit: Dieses "Lebensmotto" sollte man als Programmierer meiden, da es den Eindruck vermittelt, dass man den Code bzw. die Sprache, in der der Code geschrieben ist, nicht versteht.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:


    Zeile 3:
    In JavaScript kann kein Wert === true sein und gleichzeitig eine Eigenschaft stop besitzen. Bzw. anders gesagt: true hat keine Eigenschaft namens stop.


    Quellcode

    1. Boolean.prototype.stop = function() { console.log("loldoch"); };
    Das hatten wir auch schon im Original-Thread. :P So nach dem Motto: "Das wird beim Beenden des Programms eh wieder freigegeben, von daher ist das überbewertet".
    Wenn ranzig, dann ganz.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Hab hier auch noch was unterirdisches:

    VB.NET-Quellcode

    1. Public Function PcIsWorkingProperly() As Boolean
    2. If True=False Then
    3. Throw New Exception("The pc does not work properly.")
    4. End If
    5. Return True
    6. End Sub
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21
    @masterm return !(true == false)
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Vor kurzem gesehen, aber leider nicht mehr gefunden im Netz

    C-Quellcode

    1. counter++ = counter - 1;


    Edit: Wahrscheinlich war das gemeint counter = counter++ - 1;, aber auch das wäre unsinnig.

    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    Ich mag es, dass man nur True als Antwort bekommen kann. Das ist genauso unsinnig wie die Frage "Schläfst Du schon?". Wenn nein: Nein als Antwort. Wenn ja: keine Antwort (TimeoutException vielleicht?).

    Was ich aber noch interessanter finde: Man kann die Korrektheit eines Systems nicht alleine mit den Mitteln überprüfen, die dieses System bereitstellt.
    Beispiel: Du kannst nicht die Batterie eines Multimeters mit dem Multimeter selbst abmessen.
    Etwas abstrakter: Du kannst nicht mit den Werkzeugen, die die Mathematik bereitstellt, beweisen, dass Mathematik korrekt ist. Du kannst nur beweisen, dass Mathematik in sich konsistent ist.
    Das selbe Prinzip kann man auch auf den Code übertragen:
    Normalerweise ist True = False eine falsche Aussage. Wenn die Werkzeuge von VB aber inkonsistent zu den Werkezgen der Außenwelt sind, dann kannst Du das nicht ausschließlich mithilfe von VB-Werkzeugen beweisen:

    VB.NET-Quellcode

    1. 'Das True-Literal sollte eine wahre Aussage ausdrücken.
    2. 'Das linke True hier soll auf Korrektheit überprüft werden.
    3. 'Womit vergleichen wir das? Na mit einem Wert, der eine wahre Aussage ausdrückt, damit wir prüfen können, ob das True-Literal eine wahre Aussage ausdrückt.
    4. Debug.Assert(True = True)

    Erkennst Du das Problem? Wenn das True-Literal richtig funktioniert, dann funktioniert alles wie erwartet. Aber angenommen True und False wären vertauscht (nur die Literale, nicht die Bedeutungen von "wahre" und "falsche Aussage"), dann wird "falsche Aussage" mit "falsche Aussage" verglichen, was gleich ist, was "wahre Aussage" ergibt. Man kann also nur prüfen, ob VB insich konsistent ist, nicht aber, ob es irgendwelchen Regeln entspricht, die wir von außen festlegen.

    Edit:
    In welcher Sprache ist Ausdruck++ ein gültiges Ziel für eine Zuweisung? Was soll da überhaupt passieren? Ausdruck + 1 zurückspeichern und direkt danach mit dem Ausdruck rechts vom = überschreiben?

    https://blogs.msdn.microsoft.com/ericlippert/2011/02/03/curiouser-and-curiouser/ schrieb:

    The second reason to avoid this is simply because it bakes the noodle of anyone who reads the code.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils