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.
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)
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
Hier gibts noch mehr feines: http://www.coding-horror.de/
Und natürlich der Klassiker: http://thedailywtf.com/
MfG
Jürgen
ASP.NET Zone | gutsch-online | sharpcms | .NET Stammtisch Konstanz-Kreuzlingen | See# Party
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#
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
(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 !?
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
🙂
private int Main()
{
string programmingSkills = getMySkills("programming")
return = 1;
}
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#
da würd ich doch sagen das zum glück sowas nicht geht....
int x = 1;
x += x++;
grüße =D
private int Main()
{
string programmingSkills = getMySkills("programming")
return = 1;
}
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#
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
private int Main()
{
string programmingSkills = getMySkills("programming")
return = 1;
}
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
Das Thema passt irgendwie zu Halloween. 😉
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
Das Thema passt irgendwie zu Halloween. 😉
Naja - zu Halloween passt eher dieses Posting (ein Klassiker)
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
@tkrasinger: und so einen Künstler habt ihr entlassen? 🙂
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)
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.
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 ...
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?
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
@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!
@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
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!”
Ich fand VB6 zwar immer toll und weiß, dass man damit tolle Sachen tun kann bis zu einem gewissen Masse... aber 👍 an MaXeM 😁
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!
Oder übersehe ich gerade was?
Ja. Siehe:
das man da den ! Operator nehmen könnte ham die meisten noch ned überrissen ...
Gruß,
Markus 😉
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?
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
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!
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
29? Diese ******* hat 52 davon! Und das sind nur die Buttons. Es gibt noch mehr Controls auf der Oberfläche X(
wie bekommt man 52 buttons und noch weitere controls sinnvoll auf eine oberfläche???
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
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]
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. 😉
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
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!
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!
wobei ich das noch verstehen kann. Da hat halt jemand einfach die Runden-Funktion nicht gefunden und halt diesen Weg genommen.
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;
}
*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!
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
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....)