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*
-
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