Laden...

Coding Styles Horror

Erstellt von Khalid vor 15 Jahren Letzter Beitrag vor 3 Jahren 364.577 Views
Hinweis von herbivore vor 14 Jahren

Hier geht es um den Spaß und um den Lerneffekt. Es geht nicht um das Anprangern der Autoren, schon gar nicht als Person. Bitte berücksichtigt das beim Formulieren euer Beiträge.

Seit 23.07.2010 gilt außerdem:

Vor lauter Kommentaren zu den eigentlichen Coding Styles Horrors sieht man dieselben kaum noch. Das Thema des Threads ist auch nicht, zu jedem Horror eine bessere Lösung zu finden (das ist ohne Weiteres immer möglich, sonst wäre es ja kein Horror), sondern einfach die Leser an besonderes grausamen Konstruktionen teilhaben zu lassen. Bitte lasst daher den Horror unkommentiert.

Khalid Themenstarter:in
3.511 Beiträge seit 2005
vor 15 Jahren
Coding Styles Horror

Moin!

So, nachdem ich mich endlich von meinem Heulkrampf und danach vom Lachkrampf erholt habe, möchte ich euch mal eine echte Perle der Programmierkunst zeigen.

Es handelt sich um ein sehr altes c# Projekt unter .NET 1.1, welches ich zusätzlich nebenbei betreuen soll.

OK, hier der Code (bitte nicht weinen, es ist wirklich so)

(Variablennamen geändert und unnötiger Code entfernt!)


bool userok = false;
do
{
  if (foobar.ShowDialog() == DialogResult.Cancel)
  {
    foobar.Close;
    Close;
    return;
  }

  // Code etwas modifiert
  BenutzerRechte = UserObjekt.ExecuteScalar();
  if(BenutzerRechte != null)
  {
    userok = true;
  }
} while (((foobar.user != "UserName") || (foobar.pass != "Passwort")) && (userok == false));

Der Code ist voll von diesen Stellen. Das ist so geil...

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

458 Beiträge seit 2007
vor 15 Jahren

was ZUM...

be the hammer, not the nail!

2.082 Beiträge seit 2005
vor 15 Jahren

ROFL YMMD!

Am geilsten ist echt mal

(foobar.user != "UserName") || (foobar.pass != "Passwort"))

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

365 Beiträge seit 2007
vor 15 Jahren

*grinsssss* 😁

J
537 Beiträge seit 2007
vor 15 Jahren

Hier gibts noch mehr feines: http://www.coding-horror.de/
Und natürlich der Klassiker: http://thedailywtf.com/

104 Beiträge seit 2004
vor 15 Jahren

lol


class MeineKlasse
{

 void set( int x )
 {
  if( this == NULL ) throw new ArgumentNullException();
  this.x = x;
 }

 private: int x;
};

von coding-horror.de

Schaut mal im IRC vorbei:
Server: irc.euirc.net
Channel: #C#

1.130 Beiträge seit 2007
vor 15 Jahren

Bei coding Horror hab ich grad folgendes gefunden:

  
ObjectMania  
{  
    object obj=null;  
  
    public ObjectMania()  
    {  
        if(obj != null)  
        {  
            obj=new object();  
        }  
    }  
  

Die Beschreibung dazu:

Die Klassenvariable obj wird zuerst mit null initalisiert. Im Konstruktor wird dann überprüft, ob obj schon auf ein Objekt referenziert und wenn nicht, wird eine Instanz angelegt. ...

Rofl

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

1.130 Beiträge seit 2007
vor 15 Jahren

(x sei mal 1):
y = x++ + ++x;

Was könnten wir nach dieser Anweisung in y erwarten? Wir könnten zum Einen von links nach rechts durchgehen und sagen: x ist erst 1, also steht schonmal 1 + ++x dort. Das ++x wird aber vor der Addition erhöht, also ist es schon 2. Somit erwarten wir 1 + 2 = 3. x wird danach nochmal hochgezählt und hätte nach dieser Anweisung 4.

Zum Anderen könnten wir aber auch sagen, dass das x vor dem gesamten Ausdruck inkrementiert wird. Also hätten wir 2 + 2 = 4 für y. Und x wäre nachher sogar 5.

int x=1;
x+=1;
int y=x+x;
x+=1;

Seit wann ist hinterher x==5 !?

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

S
341 Beiträge seit 2008
vor 15 Jahren
  
int x=1;  
x+=1;  
int y=x+x;  
x+=1;  

Seit wann ist hinterher x==5 !?


int x = 1; 
x += 1; // x = x + 1 oder auch einfach x++ entspricht  1 + 1 Ergebnis: 2
int y = x + x; // da x nun 2 ist und ich hier 2 + 2 rechne hat y den wert 4
x += 1; // x = x + 1 oder auch einfach x++ entspricht x = 4 + 1 Ergebnis 5

result:

y = 4
x = 5

🙂

**Nur die Kenner können mit 10 Fingern bis 1023 zählen !!**
private int Main()
{
   string programmingSkills = getMySkills("programming")
   return = 1;
}
104 Beiträge seit 2004
vor 15 Jahren

Was ne Brainfuck Aufgabe ^^

X wird 2 mal inkrementiert -> x = 3.

Der erste Wert der Addition ist 1 da x erst um eins erhöht wird nachdem der Wert in den
Ausdruck eingeflossen ist. Der 2. Wert ist 3, da x ja schonmal durch x++ inkrementiert wurde und dann nochmal durch ++x (= inkrement bevor der Wert für den Ausdruck genutzt wird) --> y = 4.

Schaut mal im IRC vorbei:
Server: irc.euirc.net
Channel: #C#

S
341 Beiträge seit 2008
vor 15 Jahren

da würd ich doch sagen das zum glück sowas nicht geht....


int x = 1;
x += x++;

grüße =D

**Nur die Kenner können mit 10 Fingern bis 1023 zählen !!**
private int Main()
{
   string programmingSkills = getMySkills("programming")
   return = 1;
}
104 Beiträge seit 2004
vor 15 Jahren

Wieso soll das nicht gehen?

x += x++ -> x = 2;

... aber irgendwie verstehe ich nicht genau warum. Ich hätte jezt 3 erwartet. ^^

Schaut mal im IRC vorbei:
Server: irc.euirc.net
Channel: #C#

S
341 Beiträge seit 2008
vor 15 Jahren

der compiler sollte einen fehler werfen..... zumindest laut aussagen verschiedener dokus....
aber selbst hab ich es glaub ich noch nie ausprobiert... aber versuchs doch mal ob es geht...

ich meine es hängt damit zusammen das der compiler nicht weiß was er zuerst ausführen soll.... addieren oder inkrementieren.... vertauscht man die aktionen kommt man jeweils auf verschiedene ergebnisse.


x = 1; 
x++; // 2
x = x + x; // 2 + 2 = 4
// oder
x = 1; 
x = x + x; // 1 + 1= 2
x++; // 3

bitte korrigiert mich wenn ich falsch denke und fehlinformationen habe

Grüße

**Nur die Kenner können mit 10 Fingern bis 1023 zählen !!**
private int Main()
{
   string programmingSkills = getMySkills("programming")
   return = 1;
}
49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Smou,

der compiler sollte einen fehler werfen..... zumindest laut aussagen verschiedener dokus....
aber selbst hab ich es glaub ich noch nie ausprobiert... aber versuchs doch mal ob es geht...

bitte versuche doch sowas bitte selber erst, damit du hier nicht was falsches postest. Es geht nämlich. Warum auch nicht?

ich meine es hängt damit zusammen das der compiler nicht weiß was er zuerst ausführen soll.... addieren oder inkrementieren....

Da es für alle Operatoren Vorrangregeln gibt, weiß der Compiler ganz genau, was er zuerst tun muss.

herbivore

1.130 Beiträge seit 2007
vor 15 Jahren

mir ist eben folgender Code über den weg gelaufen:


int foo()
{...}
.
.
.
if(foo() != 0 ? true : false)
{...}
.
.
.

😁

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

1.044 Beiträge seit 2008
vor 15 Jahren

Das Thema passt irgendwie zu Halloween. 😉

5.742 Beiträge seit 2007
vor 15 Jahren

Das Thema passt irgendwie zu Halloween. 😉

Naja - zu Halloween passt eher dieses Posting (ein Klassiker)

T
574 Beiträge seit 2008
vor 15 Jahren

Ts, also das ist von einem Ex-Kollegen (hab durchgesetzt ihn zu kündigen):

http://www.krasinger.at/public/nc_6.jpg
http://www.krasinger.at/public/nc_7.jpg

1.134 Beiträge seit 2004
vor 15 Jahren

hahah bei solchen codes hätte ich einen infarkt bekommen 😉

Mein Stackoverflow Profil
Skype Name : Boas.Enkler (bitte einen hinweis in der Kontaktanfrage damit ich euch vom Spam unterscheiden kann)

Gelöschter Account
vor 15 Jahren

hahah bei solchen codes hätte ich einen infarkt bekommen

wenn du wüßtest, was ich schon alles für abstrakte coding-kunst gesehen habe.....

zugegeben, das was tkrasinger zeigt, hat mir auch ein lächeln gezaubert aber solche dinge sehe ich leider nciht zum ersten mal.

z.b. wir hatten mal in einem projekt ein SQL-DAL mit 6000 zeilen (da hat sogar der resharper den geist aufgegeben). 30% davon waren alle möglichen variationen diverser abfragen und alle hatten eins gemeinsam. den stringbuilder.
nach einem komplettrefactoring hatten wir nur ncoh 700 zeilen code und ca 20% mehr funktionalität.

oder in einem anderen projekt habe ich eine klasse entdeckt, die über 1000 methoden hatte. das war ziemlich unbeqem, die zu benutzen.

wiederum ein anderes mal habe ich eine klasse entdeckt die 60.000 zeilen hatte....

das sind alles so sachen, die mein herz immer wieder aufs neue erquicken^^

diese kleinigkeiten, wie create graphics, thread.sleep, application.doevents oder vergessene dispose aufrufe regen mich daher nur noch rudimentär auf.

T
574 Beiträge seit 2008
vor 15 Jahren

Etwas konnte ich meinen Leuten schon abgewöhnen. Also:

if( SomeMoreComplexBool )
   return true;
else
   return false;

schreiben die nicht mehr, da wird brav:

return SomeMoreComplexBool; 

geschrieben, allerdings geht das nur in dem Fall, andersrum leider noch ned ganz ...

return (SomeMoreComplexBool) ? false : true;

das man da den ! Operator nehmen könnte ham die meisten noch ned überrissen ...

J
31 Beiträge seit 2008
vor 15 Jahren

Etwas konnte ich meinen Leuten schon abgewöhnen.

Darf ich fragen, wie viel Erfahrung die Kollegen haben und wo und wann sie Programmieren gelernt haben?

T
574 Beiträge seit 2008
vor 15 Jahren

Darf ich fragen, wie viel Erfahrung die Kollegen haben und wo und wann sie Programmieren gelernt haben?

Also den den wir gekündigt hatten, der hatte 4 Jahre Erfahrung im .NET Bereich. Wie er das so lange geschafft hat und wo er das (nicht) gelernt hat, keine Ahnung.

Sonst haben wir im Moment ein paar Leute aus der schule und ein paar Umsteiger.

Leider alle mit relativ wenig Erfahrung ... -> Siehe dazu auch: Wien: .NET Entwickler gesucht

114 Beiträge seit 2006
vor 15 Jahren

@tkrasinger ich leide mit dir:

Was ich immer wieder im hiesigen Code finde und jedesmal wieder anfange zu weinen ist:

public bool Funktion1()
{}

public bool andereFunktion()
{
   (...)
   if (Funktion1() == true)
   {
      return true;
   }
   else
   {
      return false;
   }
}

..das schöne, der Typ ist zwar nicht de jure, aber de facto mir vorgesetzt. (...noch :evil: )

And in addition to the darkness there was also me.
And I moved upon the face of the darkness and I saw that I was alone.
Let There Be Light!

M
198 Beiträge seit 2007
vor 15 Jahren

@tkrasinger
Da gibt es noch eine Steigerung :>

In einem alten VB Projekt in welchem ich mal ein paar Änderungen machen musste bin ich fast gestorben ^^ Es ist in VB 6 geschrieben, keine Auto Einrückung, das sah dann ungefähr so aus:


If bla = 1 Then
'viel Text für viel Scrollspaß
If bla = 2 Then
'noch mehr Scrollspaß
If bla = 3 Then
'und weils so schön ist, noch mehr!
If .....
..
End If
End If
End If
....
..

Das ging teils bis in die sechste Ebene. Um die ganze Sache noch etwas interessanter zu machen sind natürlich zwischendrin auch mal End Ifs, auskommentierte End Ifs etc.
Den obligatorischen alten, teils seitenlangen, Code der einfach auskommentiert wurde (weil man ihn ja irgendwann noch einmal brauchen könnte) erwähne ich mal nicht

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo MaXeM,

ist VB6 nicht schon CodingHorror by Design? 😉 [Ich weiß wie Du fühlst, hab das jüngst auch mitmachen müssen, denn selbst Neuentwicklungen waren in VB6 einzupflanzen graus]

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

D
233 Beiträge seit 2008
vor 15 Jahren

Ich fand VB6 zwar immer toll und weiß, dass man damit tolle Sachen tun kann bis zu einem gewissen Masse... aber 👍 an MaXeM 😁

114 Beiträge seit 2006
vor 15 Jahren

geschrieben, allerdings geht das nur in dem Fall, andersrum leider noch ned ganz ...

Warum nicht return !(SomeMoreComplexBool);

Oder übersehe ich gerade was?

And in addition to the darkness there was also me.
And I moved upon the face of the darkness and I saw that I was alone.
Let There Be Light!

360 Beiträge seit 2005
vor 15 Jahren

Oder übersehe ich gerade was?

Ja. Siehe:

das man da den ! Operator nehmen könnte ham die meisten noch ned überrissen ...

Gruß,
Markus 😉

Gelöschter Account
vor 15 Jahren

meine persönlichen sinnlos-code-favoriten sind solche:


int i = 0;
int j = 12345;
//.....

int a = Convert.ToInt32(i) * Convert.ToInt32(j);

ist jetzt laufzeittechnisch nciht weiter schlimm, da diese überladung des converts nur ein "return value" macht aber wenn das wirklich an jeder stelle mit jedem datentyp, der irgendwelche zahlen enthalten kann, geschieht.....

hab mal eine etwas größere berechnung entdeckt, wo nur mit integern gerechnet wurde und dennoch überall convert war. diese berechung war daraufhin derart aufgebläht, das man sie ~50 zeilen formatieren musste, damit man sie noch irgendwie lesen konnte... ohne sinnlos-converts waren es nur noch 7 zeilen

bevor jetzt jemand sagt, das man es dadurch auch nciht besser lesen kann, so sollte er sich mal einige zeilen zusammenbasteln die so aussehen:



erg = Convert.ToInt32(a) * (Convert.ToInt32(b)+Convert.ToInt32(c) *Math.Sonstwas(Convert.ToInt32(d)-Convert.ToInt32(e))*55 - Convert.ToInt32(f) *(Convert.ToInt32(a)+(Convert.ToInt32(b)-Convert.ToInt32(c))*Convert.ToInt32(d)));

schön zu lesen oder?

3.825 Beiträge seit 2006
vor 15 Jahren

Tkrasinger :


>


>

Das ist doch genau die Lösung zu diesem Problem :

SQL-String dynamisch bauen, ohne O/R-Mapper

😉

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

114 Beiträge seit 2006
vor 15 Jahren

Oder übersehe ich gerade was?

Ja. Siehe:

das man da den ! Operator nehmen könnte ham die meisten noch ned überrissen ...

Gruß,
Markus 😉

Ah, ok ^^

And in addition to the darkness there was also me.
And I moved upon the face of the darkness and I saw that I was alone.
Let There Be Light!

E
200 Beiträge seit 2006
vor 15 Jahren

Hab auch mal ein "etwas" bescheuertes Stück Quellcode gefunden:



    button29_Click(null, null);
    for (j = 0; j < 30; j++)
    {
        crc.GetScreen(screentxt,ref pos);
        if (pos == Convert.ToInt32(Liste[i].get_text))
        {
            j = 31;
        }
        else
        {
            crc.SendKey("d");
        }
    }
    if (j == 30)
    {
        s_return = "Cursor Position " + Liste[i].get_text + " not available!";
        stop = true;
    }

Steht so in einem Switch von nem Kollegen drin. Und der soll angeblich ausgelernt haben...

Schädel -> Wand

Gelöschter Account
vor 15 Jahren

am meisten gefällt mir aber das: "button29_Click(null, null);"

omg... 29 buttons und alle keinen sinnigen namen. und dann noch so ein aufruf...

E
200 Beiträge seit 2006
vor 15 Jahren

29? Diese ******* hat 52 davon! Und das sind nur die Buttons. Es gibt noch mehr Controls auf der Oberfläche X(

_
227 Beiträge seit 2006
vor 15 Jahren

wie bekommt man 52 buttons und noch weitere controls sinnvoll auf eine oberfläche???

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo daniel,

mit 7x7 = 49 ist man nahe dran. Das sollte schon klappen. Minesweeper hat ja sogar schon in der Anfängereinstellung 9x9 = 81 Buttons. 🙂

herbivore

Gelöschter Account
vor 15 Jahren

naja, ich kenn jemanden, der hat ebenfalls versucht minesweeper nachzubauen..... mit dem designer. aber nicht etwa die 99 variante (klein) sondern eine 100100 variante für extralangen spielspaß^^

als extralang hat sich dann die aufbauzeit der form herausgestellt^^

T
574 Beiträge seit 2008
vor 15 Jahren

Wir hatten mal eine Variante in Access. Da waren horizontal Aussendungen und vertikal die Kontaktpersonen und an der Kreuzung war ein Button zur Markierung ob die Person eingeladen werden soll oder nicht.

Wenn also jemand eine Aussendung hinzugefügt hatte, musste man das händisch im Formular nachziehen. Vertikal hats das Access erledigt.

Irgendwann - so etwa als das Formular im Designer 10min zum aufscheinen gebraucht hat - hab ich dann gemeint, irgendwie ist des ned so cool ... und habs im Web umgesetzt. Funktionalität mal 3 + einfache Wartung. Das braucht jetzt zwar auch eine Minute zum laden, aber das bei 2500*50, was dann über 3 Mio Möglichkeiten gibt irgendwo hinzuklicken. Aber alle Aussendungen will eh kein Mensch sehen.[/color]

J
31 Beiträge seit 2008
vor 15 Jahren

Neulich ist mir ein Buchtitel begegnet.

"Beauty is our business"

Es geht im Buch zwar um theoretische Informatik, aber man kann das Motto guten Gewissens auch auf Code übertragen. 😉

95 Beiträge seit 2008
vor 15 Jahren

japp je schöner man einen Code anleg desto besser können ander Programmier ihn lesen sehr wichtig😁
Naja leider halten sich nicht alles Leute daran.

Liebe Grüße
Daniel Hahn (Giggeler)
www.giggeler-it.de

114 Beiträge seit 2006
vor 15 Jahren

das zu überarbeitende Projekt aufmachen, sich wundern, den nagenden Kopfschmerz beim Nachverfolgen des Code bemerken , anfangen zu schreien, in Agonie am Boden wälzen und dann das beste draus machen.
(Oben Before unten After)

Das letzte Staticding hätte ich auch noch erlegen können, aber ich war zu faul + da ist es wenigstens ne Quick and Dirty Lösung. Die anderen Staticisten wurden nur in der Klasse benutzt und wurden nirgendwo von außerhalb angesprochen, es war also völlig(!) unnötig sie zu "statischen", bzw public zu machen. argh

(..immer dran denken. Nur noch 30 Tage lang diesen Deppenquatsch ertragen müssen ..immer dran denken. Nur noch 30 Tage lang diesen Deppenquatsch ertragen müssen..immer dran denken. Nur noch 30 Tage lang diesen Deppenquatsch ertragen müssen..immer dran denken. Nur noch 30 Tage lang diesen Deppenquatsch ertragen müssen..immer dran denken. Nur noch 30 Tage lang diesen Deppenquatsch ertragen müssen seufz)

And in addition to the darkness there was also me.
And I moved upon the face of the darkness and I saw that I was alone.
Let There Be Light!

114 Beiträge seit 2006
vor 15 Jahren

Und noch eine Perle:

dblCalcBid = Convert.ToDouble(tblAllQuotes.Rows[0]["calc_bid"]);
dblCalcBid = Convert.ToDouble(dblCalcBid.ToString("0.00"));

And in addition to the darkness there was also me.
And I moved upon the face of the darkness and I saw that I was alone.
Let There Be Light!

T
574 Beiträge seit 2008
vor 15 Jahren

wobei ich das noch verstehen kann. Da hat halt jemand einfach die Runden-Funktion nicht gefunden und halt diesen Weg genommen.

N
4.644 Beiträge seit 2004
vor 15 Jahren

Ich habe auch etwas sehr schönes gefunden.

public const bool TRUEVALUE = true;
public const bool FALSEVALUE = false;
public static bool CheckBoolValue(bool value)
{
    return value ? TRUEVALUE : FALSEVALUE;
}
114 Beiträge seit 2006
vor 15 Jahren

*rofl* Jetzt schnall ich erst was das soll .. runden ^^

Aber egal, bedenkt man daß das von einem "professionellen" Entwickler stammt, bleibt es peinlich

And in addition to the darkness there was also me.
And I moved upon the face of the darkness and I saw that I was alone.
Let There Be Light!

Gelöschter Account
vor 15 Jahren

naja, es ist nicht direkt runden..... eher abschneiden... da auch eine 1.009 im ergebniss eine 1.0 ergeben würde.

T
574 Beiträge seit 2008
vor 15 Jahren

naja, es ist nicht direkt runden..... eher abschneiden... da auch eine 1.009 im ergebniss eine 1.0 ergeben würde.

also wenn ich mit 1.009 ein ToString("0.00") mache, kommt "1.01" raus => Runden

Gelöschter Account
vor 15 Jahren
switch (Thread.CurrentThread.CurrentUICulture.Name)
{
case "de":
MessageBox.Show("<fehlertext auf deutsch>" + sqlex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
case "en":
MessageBox.Show("<fehlertext auf englisch>" + sqlex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
};

na das nenn ich doch mal lokalisierung oder? 😃

das steht im übrigen überall im code... auch für die ui-controls.....
kaum eine klasse die nciht mindestens ein solches konstrukt hat....

(das ist kein fake....)