Coding Styles Horror



  • Inspiriert durch einen gleichnamigen Thread in einem anderen Forum, dachte ich mir, solle das hier auch existieren.
    Immer wenn ihr beim Entwickeln, Refactoren, Reviewen oder ähnlichen auf ein interessanten Konstrukt stößt (sei es von anderen oder irgendwann selbst mal verbrochen), immer her damit.

    z.B.

    If (value == true)
        return true;
    else if (value == false)
        return false;
    

    oder

    int nCount = 0;
    int nNbAllValues = ...
    for(int i = 0; i < nNbAllValues; i++)
    {
         nCount++;
    }
    
    //Build indirection array
    m_arIndices = new int[ nCount ];
    
    nCount = 0;
    for(int i = 0; i < nNbAllValues; i++)
    {
        m_arIndices[ nCount ] = i;
        nCount++;
    }
    

    Es ist oft recht belustigend was sich so alles in unseren Applikationen wieder findet, laut der Devise: Ein Hack der funktioniert, bleibt auch bestehen.



  • Komm die Thread Idee eventuell aus dem myCSHARP Forum?
    Na, dann let's go, da bin ich mal gespannt welche interessante Schnipsel hier gepostet werden.



  • Absolut richtig 😉 wollte nur keine "Werbung" machen



  • Ich musste mal an einem Projekt weiterarbeiten, wo der Author wohl nicht wusste, dass ein 'if' nicht zwingend ein 'else' brauch.

    An hunderten Stellen stand also sowas:

    if(! a) {
    }
    else {
     mach was, falls a gilt
    }
    


  • ähnlches sieht man auch manchmal:

    switch (a)
    {
        case 1: b = 2; break;
        case 2: b = 4; break;
        case 3: b = 6; break;
        ...
    }
    

    ^^ statt b = 2*a;
    🙂



  • void main()
    

    😉
    rya.



  • Einer meiner Ex-Externen Entwickler hatte eine Aversion gegen switch/case. Statt dessen findet man überall im Code sowas:

    if(selectionNumber==0) {
    }
    else if(selectionNumber==1) {
    }
    else if(selectionNumber==2) {
    }
    else if(selectionNumber==3) {
    }
    else if(selectionNumber==4) {
    }
    

    Sein Rekord ist eine if-else Kette mit 39 else-if



  • // make multiple of 4
    if (a % 4)
      a++;
    
    for (n=1; n==10; n=n+2)  // for n=1 to 10 step 2
    {
      ...
    }
    

    🙂



  • Jockelx schrieb:

    Ich musste mal an einem Projekt weiterarbeiten, wo der Author wohl nicht wusste, dass ein 'if' nicht zwingend ein 'else' brauch.

    Sicher, dass die Bedingungen einen boolschen Operator hatte? Bei unseren älteren COBOL-Programmierern ist es z.B. Sitte, statt einer negierten Bedingung lieber einen Else-Zweig auszuschreiben. Vielleicht rührt's ja daher.

    if bedingung then
       continue
    else
       ...
    end-if
    

    A propos COBOL, ein Codestück, welches dafür da war, (O-Ton) "dass die Datenbank bei vielen wiederholten Abfragen nicht ständig abschmiert"...

    zeit-schleife section.
    zs-00.
        move 0 to zeit-wert
        perform until zeit-wert = 10000
            add 1 to zeit-wert.
    zs-99.
        exit.
    


  • #ifndef RANDOMCLASS_H
    #define RANDOMCLASS_H
    
    using namespace std;
    
    class RandomClass
    {
       ...
    };
    
    #endif
    

    derartiges findet sich in einigen sehr oft verwendeten Bibliotheken unserer Software



  • zwutz schrieb:

    #ifndef RANDOMCLASS_H
    #define RANDOMCLASS_H
    
    using namespace std;
    
    class RandomClass
    {
       ...
    };
    
    #endif
    

    derartiges findet sich in einigen sehr oft verwendeten Bibliotheken unserer Software

    meinst du wegen des 'using'? gibt's kein unuse namespace blah;?
    falls nicht, gleich als vorschlag einreichen *fg*
    🙂


  • Mod

    Etwas anonymisiert, aber so in etwa sah der Code aus den ich neulich gefunden habe:

    for (int i=0; i < 10000; i++)
     {
      grosses_array_mit_10000_eintraegen_A[i]=i;
     }
    for (int i=0; i < 10000; i++)
     {
      grosses_array_mit_10000_eintraegen_B[i]=i;
     }
    for (int i=0; i < 10000; i++)
     {
      grosses_array_mit_10000_eintraegen_C[i]=i;
     }
    for (int i=0; i < 10000; i++)
     {
      grosses_array_mit_10000_eintraegen_D[i]=i;
     }
    for (int i=0; i < 10000; i++)
     {
      grosses_array_mit_10000_eintraegen_E[i]=i;
     }
    for (int i=0; i < 10000; i++)
     {
      grosses_array_mit_10000_eintraegen_F[i]=i;
     }
    

    Das war übrigens innerhalb eines zeitkritischen Loops.



  • bool b = irgendWas();
    
    switch(b)
    {
       case true: doA(); break;
       case false: doB(); break;
       default: doC(); break;
    }
    


  • int a = 1;
    printf ("%d %d\n", a, a++);
    

    🙂



  • Von einem "erfahrenen" C#-Entwickler:

    object obj = reader["GUID"];  // Anmerkung: das object ist vom Type Guid
    
    Guid guid = new Guid(obj.ToString());
    


  • #include <someclass.h>
    
    short foo()
    {
      short rc = RC_GOOD; //rc fuer return code
    
      Someclass* pSc = NULL;
      if (!pSc)  //könnte ja sein dass die Heinzelmännchen da waren...
      { 
        pSc = new Someclass();
      }
      if (!pSc) //oder dass new plötzlich wieder im Jahr 1993 ist
      {
        rc = RC_FAIL; //setzen wir sicherheitshalber den returncode
        return RC_FAIL; //weil wir ihn eh nicht zurückgeben!
      }
    
      if (rc != RC_FAIL) //wie auch immer das hier RC_FAIL sein könnte
      {
        /* ... */   // arbeite mit pSc
      }
    
      return rc;
    }
    

    Und das laufend. *wein*



  • ^^...und das 'delete' fehlt auch noch.

    pumuckl schrieb:

    Und das laufend. *wein*

    von einer person?
    🙂



  • pumuckl schrieb:

    #include <someclass.h>
    
    short foo()
    {
      short rc = RC_GOOD; //rc fuer return code
    
      Someclass* pSc = NULL;
      if (!pSc)  //könnte ja sein dass die Heinzelmännchen da waren...
      { 
        pSc = new Someclass();
      }
      if (!pSc) //oder dass new plötzlich wieder im Jahr 1993 ist
      {
        rc = RC_FAIL; //setzen wir sicherheitshalber den returncode
        return RC_FAIL; //weil wir ihn eh nicht zurückgeben!
      }
    
      if (rc != RC_FAIL) //wie auch immer das hier RC_FAIL sein könnte
      {
        /* ... */   // arbeite mit pSc
      }
    
      return rc;
    }
    

    Wenn die Kommentare auchnoch so im Code wären, dann wäre es der beste Code aller Zeiten.



  • Zumindest tut dieser COde vermutlich exakt das, was er soll 😃 Heinzelmännchen-Safe 👍



  • ich tippe darauf das der code staendig refactort wurde - da ne zeile geaendert - dann da - (ah da kann gleich ein return hin) und am ende war er so

    aber echt nett an zu sehen #gg


Anmelden zum Antworten