Laden...

Coding Styles Horror

Erstellt von Khalid vor 15 Jahren Letzter Beitrag vor 3 Jahren 364.746 Views
360 Beiträge seit 2005
vor 15 Jahren
3.003 Beiträge seit 2006
vor 15 Jahren

*grien* Okay, dann war das ein Scherz des Kollegen, der's irgendwie ins Produktivsystem geschafft hat. QS gibt einen aus, nehme ich an 😉

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

J
237 Beiträge seit 2008
vor 15 Jahren

Das wollte ich euch nicht vorenthalten:
(Methodennamen geändert)


// CHANGE IN V2: Man soll statt DoSth jetzt lieber DoSth2 verwenden
if(false == true) obj.DoSth(...);
obj.DoSth2(...);

Grüße,
JasonDelife.

Beim Programmieren löst man die Probleme, die man nicht hätte, programmierte man nicht.

3.430 Beiträge seit 2007
vor 15 Jahren

Hi

if(false == true) obj.DoSth(...);  

Hihi,
ja diese If-Bedingung wird doch sehr sehr selten erfüllt =)

Das hat irgendwie was von: Wenn die Katze ein Huhn wäre dann würde sie auch Eier legen.

Gruss
Michael

1.346 Beiträge seit 2008
vor 15 Jahren

Vieleicht wird auch ein möglicher Weltuntergang überprüft? Wie philosophisch. ^^

Gruß pdelvo

E
200 Beiträge seit 2006
vor 15 Jahren

Ich will hier raus -_-:


        For j = iStart To iEnd Step iStep

            If bDelLast Then
                iStart2 = j - 1
            Else
                iStart2 = j + 1
            End If

            For i = iStart2 To iEnd Step iStep
                If T(j).slength = T(i).slength Then
                    If T(j).szPOSItemID = T(i).szPOSItemID Then
                        If T(j).dPrice = T(i).dPrice Then
                            If T(j).dOrgPrice = T(i).dOrgPrice Then
                                If T(j).szItemLink = T(i).szItemLink Then
                                    If T(j).szXXX = T(i).szXXX Then
                                        If T(j).szYYY = T(i).szYYY Then
                                            If T(j).szInputString = T(i).szInputString Then
                                                If T(j).bTax = T(i).bTax Then
                                                    If T(j).szDiscount = T(i).szDiscount Then
                                                    
                                                        ReDim Preserve T(1 + UBound(T))

                                                        ...
                                                        ' Mach was...
                                                        Exit For
                                                        End If
                                                    End If
                                                End If
                                            End If
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            Next
        Next

109 Beiträge seit 2008
vor 15 Jahren

das is hammer 😉 da wollte einer ein Labyrinth bauen

E
200 Beiträge seit 2006
vor 15 Jahren

Fehlt nur noch zu jedem If ein Else sowie GoTos, dann sind die Russen vollends verwirrt* 😉

:::

3.003 Beiträge seit 2006
vor 15 Jahren

Passt nicht direkt zu Coding Style, aber da gerade schon VB gepostet wurde...

VB, much like generic beer and America's Funniest Home Videos is an enabling technology for stupid people.
It allows stupid people to do stupid things on scale that they couldn't accomplish on their own.
While using VB does not make you a dumb programmer, being a dumb programmer does make VB your weapon of choice.
That is unless you really don't know what the bleep you are doing, then its PHP all the way.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

U
208 Beiträge seit 2008
vor 14 Jahren

Das kann zwar nicht mit dem "Monster" von Easyrider mithalten, aber folgendes If-Konstrukt, auf das ich eben gestoßen bin, hat mich doch kurzzeitig amüsiert. 🙂

If var1 <> "" Then
    ' Do something
ElseIf var1 = "" Then
    ' Do something else
End If
C
40 Beiträge seit 2008
vor 14 Jahren

Habe hier auch eine schöne Geschichte. Ich fing mal bei einer Firma an, bei der ich mich (auch) um die dortige Webanwendung (PHP + MYSQL) kümmern sollte. Soweit kein Problem dachte ich - denn es hieß, der Code sei sehr gut kommentiert. Das war er auch, irgendwie... Der erste Programmierer hinterließ seine Kommentare auf Englisch, tat zwar nicht Not, war aber okay und irgendwann ging er auch wieder. Der zweite Programmierer war ein Spanier mit eher rudimentären Englisch-Kenntnissen, sein Deutsch war noch schlechter. Also änderte er ca 90% der Kommentare in mehr oder weniger gut übersetztes Spanisch!!! Dann kam ich, sah und ging auch bald wieder 😁 Nebenbei war der Code auch eher was für die Mülltonne. Später habe ich erfahren, dass die komplette Webanwendung für 20.000 EUR neu aufgesetzt wurde - extern...

456 Beiträge seit 2007
vor 14 Jahren

das is hammer 😉 da wollte einer ein Labyrinth bauen

Ach das nicht so wild, in meiner letzten Firma hat man bei VB nicht mal Einrückungen vorgenommen 😉

456 Beiträge seit 2007
vor 14 Jahren

OK, ich habe auch zwei lustige Anekdoten

1.) Wir haben uns beim Testen immer mal wieder gewundert, warum der Server manchmal runterfährt ... später hat sich herausgestellt, dass einer in einer J2EE-Anwendung bei gewisser Bedingung System.Exit(0) zurückgegeben hatte 😁

2.) Code-Cleanup-Phase. Wir sollten in einer J2EE-Anwendung alle System.out.prints (also C# wäre Console.WriteLine) rausmachen aus der Applikation ... ein Kollege hat das zu ernst genommen und hat in den JSP-Seiten alle out.printlns rausgemacht 😁 ... nix mehr ging auf fast allen Seiten und wir wunderten uns, bis ich mit dem besagten eine Rauchen war, dann wurde schnell klar, dass es er war.

3.003 Beiträge seit 2006
vor 14 Jahren

Ich muss mal grad einen Kollegen schlagen...



if(e.CallBackParameters.Count == 1) 
    throw new Exception("Insufficient paremeters.");
if (e.CallbackParameters.Count > 0)
{
    ...
    return;
}

//irgendwie springt er hier nicht rein
if(e.CallbackParameters > 1) //WTF?! tino 09-04-30
{
    ...
}

("..." sind jeweils 10 Zeilen Code ungefähr. Kommentare sind 1:1 übernommen, inklusive des neuen von mir)

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

E
200 Beiträge seit 2006
vor 14 Jahren

Deinen Kommentar find ich ja fast noch geiler als den Codeschnippsel 😁

C
79 Beiträge seit 2006
vor 14 Jahren

Ahahaaaaa, einer der schönsten bis dato find ich 😄

J
237 Beiträge seit 2008
vor 14 Jahren
Bool-Variablennamen - Immer ein Spaß

private void Mainform_FormClosing(object sender, FormClosingEventArgs e) {
    if(conn.NotDisconnected != false) conn.Disconnect();
}

Anmerkung:
conn ist eine Instanz einer selbstprogrammierten Connection-Klasse,
vom gleichen Programmierer wie der Code.

Grüße, JasonDelife.

Beim Programmieren löst man die Probleme, die man nicht hätte, programmierte man nicht.

U
1.578 Beiträge seit 2009
vor 14 Jahren

brr - wie kann man sich sowas nur ausdenken
einmal "NotDisconnected" und dann noch != false als i tuepfelchen #gg

Gelöschter Account
vor 14 Jahren

und ein direkter aufruf von DAL funktionalität in der gui UND die genaue kenntniss der DAL-abläufe in der gui.... 😃

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo zusammen

Ich habe ja schon viele return-Statements gesehen, aber dieses übertrifft alles:


return (((((((((((((((((((str2 + "<form method='get'>" + "<input type='hidden' name='preview' value='sendmail'/>") + "<input type='hidden' name='ID' value='" + this.hashkey + "'/>") + "<input type='hidden' name='imgUrl'  value='" + image + "'/>") + "<table border='0' cellpadding='4'>") + "<tr><td colspan='2'>" + Gallery.translate("Request price information for this image", this.myProperty.Language) + "</td></tr>") + "<tr>") + "<td>" + Gallery.translate("Name", this.myProperty.Language) + "</td>") + "<td><input type='text' name='Name'/></td>") + "</tr>" + "<tr>") + "<td>" + Gallery.translate("e-mail", this.myProperty.Language) + "</td>") + "<td><input type='text' name='Email'/></td>") + "</tr>" + "<tr>") + "<td>" + Gallery.translate("Image", this.myProperty.Language) + "</td>") + "<td>" + image + "</td>") + "</tr>" + "<tr>") + "<td valign='top'>" + Gallery.translate("Message", this.myProperty.Language) + "</td>") + "<td><textarea name='Message' cols='40' rows='2'></textarea></td>" + "</tr>") + "<tr><td></td><td><input type='submit' value='" + Gallery.translate("send e-mail", this.myProperty.Language) + "'/></td></tr>") + "</form>");

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

Gelöschter Account
vor 14 Jahren

lol. knowhow protection by obscurity 😃

wenn man das überhaupt als knowhow bezeichnen kann 😃

5.742 Beiträge seit 2007
vor 14 Jahren

Ich habe ja schon viele return-Statements gesehen, aber dieses übertrifft alles

WTF!
Also mehr fällt mir dazu wirklich nicht ein...

U
1.578 Beiträge seit 2009
vor 14 Jahren

wenn das wenigstens noch formatiert waere #gg


return (((((((((((((((((((str2 + "
<form method='get'>" + 
    "<input type='hidden' name='preview' value='sendmail'/>") + 
    "<input type='hidden' name='ID' value='" + this.hashkey + "'/>") + 
    "<input type='hidden' name='imgUrl'  value='" + image + "'/>") + 
    "<table border='0' cellpadding='4'>") + 
        "<tr><td colspan='2'>" + 
            Gallery.translate("Reque...

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo zusammen

Nur schon die öffnenden, runden Klammern sind ja ein Joke für sich.
Alles andere ist nur ein Nebenjoke 😉

ps: Ganz abgesehen davon, dass man diese Klammern gar nicht bräuchte.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo zusammen

Zwar nicht gerade Horror aber doch lustig 😃


  class MySuperComparer : IComparer<SomeType>
  {
    public int Compare ......

Das steht irgendwo gaaaanz weit unten in einer Klasse als nested class.
edit: Aja und "SomeType" heisst in echt weder "SomeType" noch "Super" g

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

R
234 Beiträge seit 2007
vor 14 Jahren

Da hat's mir gerade ne ordentliche Gänsehaut beschärt:


int i = path.LastIndexOf('\\');
Text = path.Substring(i+1);
if (Text.IndexOf(".") > 0) Text = Text.Substring(0,Text.LastIndexOf("."));

Hm, das muss doch irgendwie einfacher gehen!? 🤔 😉

S
443 Beiträge seit 2008
vor 14 Jahren

ja

  string fileName = Path.GetFileNameWithoutExtension(path);

mbg
Rossegger Robert
mehr fragen mehr wissen

Montag morgen ist die beste Zeit um eine erfolgreiche Woche zu beginnen

467 Beiträge seit 2007
vor 14 Jahren

ho, danke. Kannte ich nicht. Danke, ich hab noch überlegt was an dem code Horor ist 😃

3.003 Beiträge seit 2006
vor 14 Jahren

Mal etwas, das ich gestern in der Webshop-Software "xt:commerce" gefunden habe - Datenbank-Horror, aber passt ja irgendwie auch hier hinein.

Der Webshop kennt Kundengruppen (die haben auch alle eine ID und die entsprechende Tabelle), und außerdem können bestimmten Kundengruppen für bestimmte Artikel in bestimmten Mengen bestimmte Preise (Staffelpreise) zugeordnet werden. Also: T-Shirts sind für Mitglieder der Gruppe "Stammkunden" 8,-, ab 5 Stueck 6,- und ab 10 Stück 5,- - so in der Art.

Nun würde man vermuten, dass die Tabelle mit jenen Staffelpreisen etwa so aussieht:
id-kundengruppenid-artikelid-abmenge-preis

Falsch gedacht. Die Jungs haben eine Tabelle
id-artikelid-abmenge-preis

Und zwar eine solche Tabelle für jede Kundengruppe. Nicht schlimm? Von wegen. Beim Anlegen einer Kundengruppe wird die entsprechende Tabelle angelegt (bennennung name_fortlaufendeInt, also meinname_1 beispielsweise). Beim Löschen der Kundengruppe wird die Tabelle entfernt. Und das geilste: die fortlaufende Nummer im Namen der Tabelle hat nichts, aber auch gar nichts mit der ID der Kundengruppe zu tun - an der Stelle verlässt man sich auf die Reihenfolge der Kundengruppen.

Normalisierung und Konsistenz sind Entwicklern der "Onlineshop software der Spitzenklasse" (Selbstbeschreibung) offenbar Fremdworte.

Und da wundern sich einige, wenn ich allergisch auf die Kombination PHP/MySql reagiere.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

360 Beiträge seit 2005
vor 14 Jahren

Moin,

Was hat denn die Wahl der Sprache mit den Fähigkeiten der Entwickler zu tun ein grundsätzliches Problem anzugehen - egal mit welcher Sprache?

Gruß,
Markus 😃

R
234 Beiträge seit 2007
vor 14 Jahren

Habe gestern im dot.net magazin in einem Code-Listing folgendes entdeckt:


i = ++i;

Liest da tatsächlich niemand Korrektur oder gibt es eine sinnvolle Erklärung dafür?

Der Horror liegt im Detail. 😉

3.003 Beiträge seit 2006
vor 14 Jahren

Moin,

Was hat denn die Wahl der Sprache mit den Fähigkeiten der Entwickler zu tun ein grundsätzliches Problem anzugehen - egal mit welcher Sprache?

Gruß,
Markus 😃

Nichts. Das habe ich aber auch nicht geschrieben. Man kann sich mit jeder Programmiersprache in den Fuß schießen. Solcherlei Unfälle passieren aber bei der Kombination PHP/MySql verblüffend häufig. Ob das an der weiten Verbreitung von PHP liegt (mehr Anwender => mehr Horrorfabrikanten), ob es daran liegt, dass PHP das Fabrizieren solcher Fehler sehr erleichtert, ob es daran liegt, dass immer um Mitternacht bei Vollmond der eigentlich saubere PHP-Code sich verwandelt und als Wercode in harmlosen Apacheservern Amok läuft - das ist mir persönlich völlig egal. In jedem Fall liegt die Ursache irgendwo bei der Programmiersprache, ob im guten (einfach zu erlernen, zieht Anfänger an) oder schlechten (Design erleichtert Fehler) Sinn. Das trifft auch auf andere Sprachen zu. Folgende Signatur trifft es super, finde ich.

VB, much like generic beer and America's Funniest Home Videos is an enabling technology for stupid people.
It allows stupid people to do stupid things on scale that they couldn't accomplish on their own.
While using VB does not make you a dumb programmer, being a dumb programmer does make VB your weapon of choice.
That is unless you really don't know what the beeep you are doing, then its PHP all the way.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

360 Beiträge seit 2005
vor 14 Jahren

Moin LaTino,

wenn es an PHP liegt, dann deswegen, weil es tatsächlich eine Menge Leute gibt, die in PHP programmieren und die nicht wissen was sie da eigentlich tun...
PHP begünstigt ein schlechtes Datenbank-Design nicht mehr und nicht weniger als jede andere Programmiersprache auch - schlicht deswegen, weil PHP keinen direkten Einfluss auf das Datenbank-Design hat.

Aber back to Topic - ich verstehe was du mit deiner Aussage sagen willst.

Gruß,
Markus 😃

2.921 Beiträge seit 2005
vor 14 Jahren
I couldn't believe it at first... but there was still more to come....

Auszug aus VB:


Public Sub UpdateControl()
   Monitor.Enter(ME) 'Control-Zugriff richtig Synchronisieren
   [...]
       MainForm.ProgressBar.Visible = TRUE
   [...]
   Monitor.Exit(ME)
End Sub

Und diese Funktion wird natürlich - wie sollte es auch anders sein - aus einem Thread heraus aufgerufen der natürlich nicht der Gui-Thread ist.

s. dazu auch:

Control.Invoke und Application.DoEvents vs. Monitor.Enter / Monitor.Exit

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

87 Beiträge seit 2006
vor 14 Jahren

Mahlzeit,

also überflüssige if konstrukte


...
if (ausdruck)
	return true;
else
	return false;
...

oder auch


i = ++i;

seh ich ja noch mal ein, hab ich also ich vor jahren die ersten schritte in der programmierung gemacht habe, mitunter auch noch getan. so was macht man doch nicht mutwillig, sondern weil man es nicht besser weiß.

viel schlimmer finde ich da die jungs / mädels die früher viel mit c++ gemacht haben und jetzt ihren sicherlich guten c++ code 1:1 in C# umsetzten.


namespace SevenZip.Compression.LZMA
{
[...]
	public class Encoder : ICoder, ISetCoderProperties, IWriteCoderProperties
	{
		[...]
		public void Create(int numPosBits, int numPrevBits)
		{
			if (m_Coders != null && m_NumPrevBits == numPrevBits && m_NumPosBits == numPosBits)
				return;
			m_NumPosBits = numPosBits;
			m_PosMask = ((uint)1 << numPosBits) - 1;
			m_NumPrevBits = numPrevBits;
			uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits);
			m_Coders = new Encoder2[numStates];
			for (uint i = 0; i < numStates; i++)
				m_Coders[i].Create();
		}
		[...]
	}
}

ich nich mal sicher ob das geht, das feld is zwar neu angelegt, aber des wegen sind doch noch lange keine elemente drin... 🤔

wer sich sowas mal aus der nähe anschaun mag kann sich zb die das 7zip SDK http://www.7-zip.org/sdk.html in der c# ausgabe anschaun. sehr sehr grusselig...

soll heisen auch bekannte und gute programmieren machen quatsch in sprachen, in dehen sich nicht richtig auskennen.

MfG Tilton

"In der Informatik geht es genauso wenig um Computer wie in der Astonomie um Teleskope."
Edsger W. Dijkstra

The Humble Programmer by Edsger W. Dijkstra

87 Beiträge seit 2006
vor 14 Jahren

heute is wieder so ein tag...
gleich noch was gefunden

http://www.mikrocontroller.net/topic/22952

man beachte


[...]
das könnte man mit if(b&1)crc^=0xA001; bewerkstelligen,
jedoch ist         b&1?crc^=40961:0;   2 Buchstaben kürzer, was mit
persönlich gefällt
                                       (das :0 braucht man nur aus
syntaktischen Gründen).
                                       (außerdem geht if() nicht in der
runden for-Klammer s.u.)

also, geschoben werden muss immer:

c=c >> 1  gleichbedeuten mit c>>=1  gleichbedeutend mit c/=2
(zumindest wenn c unsigned ist)

Beim nächsten Durchgang ist Bit1 von Input Data von Interesse, also
schiebe ich es an die Stelle d0:
d=d >> 1  c>>=1  c/=2

statt  for(j=0;j<8;j++)  schreibe ich  for(j=8;j;j--)   wieder 2
Buchstaben gespart  (-; (das mittlere j ist eine

Kurzform für j!=0)

und statt
for(j=8;j;j--){b=c^d;c/=2;d/=2;if(b&1)crc^=0xA001;} schreibe ich kurz
for(j=8;j;j--,b=c^d,c/=2,d/=2,b&1?c^=40961:0); schade, dass das
überflüssige :0 syntaktisch sein muss
[...]

"2 Buchstaben gespart" ahhhhhhhh...

MfG

"In der Informatik geht es genauso wenig um Computer wie in der Astonomie um Teleskope."
Edsger W. Dijkstra

The Humble Programmer by Edsger W. Dijkstra

390 Beiträge seit 2008
vor 14 Jahren
...Den von Dir genannten Code kann man weiter optimieren...

c=c >> 1  gleichbedeuten mit c>>=1  gleichbedeutend mit c/=2

Ich denke der Compiler macht keinen Unterschied zwischen den ersten beiden Schreibweisen und die Division ist wohl teurer als die Schiebeoperation. Darum kann man wohl kaum von Optimierung reden.

Trotzdem finde ich den Code interessant. 😉

using Skill

193 Beiträge seit 2006
vor 14 Jahren

Aber gute Compiler Erkennen Divisionen und Multiplikationen mit ganzzahligen vielfachen von 2 und machen an der Stelle dann auch wieder eine Shift-Operation draus.

Daher sollte bei allen 3 Varianten der gleiche Code herauskommen.

Gruß Jake

P. S. Aber vielleicht sollten wir zusammen legen und dem Jungen einen neue großen Festplatte besorgen, damit er nicht bei seinen Sourcen ein paar Bytes einsparen muss.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Jake,

Aber gute Compiler Erkennen Divisionen und Multiplikationen [...] und machen an der Stelle dann auch wieder eine Shift-Operation draus.

der C#-Compiler erzeugt bei i<<1 und i*2 unterschiedlichen Code. Allerdings kann es gut sein, dass der JIT die Optimierung dann doch noch vornimmt.

... mit ganzzahligen vielfachen von 2 ...

Du meinst, bei Zahlen in deren Primfaktorenzerlegungen nur Zweien enthalten sind (also Zahlen der Form 2 hoch i). Allerdings ist die Optimierung nicht auf solche Zahlen beschränkt. Üblicherweise ist auch z.B. eine Multiplikation mit z.B. 35 (binär 100101) mit (n<<5)+(n<<2)+n schneller zu berechnen. Die Optimierung lässt sich also bei allen Faktoren anwenden, die in der binären Repräsentation nicht mehr als einen bestimmten Schwellwert von Einsen haben. Solche Optimierungen hat schon mein C-Compiler Anno 1985 gemacht.

herbivore

193 Beiträge seit 2006
vor 14 Jahren

Hallo Jake,

Aber gute Compiler Erkennen Divisionen und Multiplikationen [...] und machen an der Stelle dann auch wieder eine Shift-Operation draus.
der C#-Compiler erzeugt bei i<<1 und i*2 unterschiedlichen Code. Allerdings kann es gut sein, dass der JIT die Optimierung dann doch noch vornimmt.

Bei C# hab ich mir das ganze ehrlich gesagt noch nie angeschaut. Aber zu meiner Zeit als Embedded / Microcontroller-Entwickler hab ich mir desöfteren angeschaut, was der Compiler baut (1kB Programmspeicher) und da war es eben so, dass der Optimizer der guten Compiler Shift-Operationen gemacht hat.

... mit ganzzahligen vielfachen von 2 ...
Du meinst, bei Zahlen in deren Primfaktorenzerlegungen nur Zweien enthalten sind (also Zahlen der Form 2 hoch i).

Ähm, ja ... 😉

Gruß Jake

1.361 Beiträge seit 2007
vor 14 Jahren

Wenn schon "optimieren", dann doch bitte exzessiv 😁

b&1?c^=40961:0
//zu
c^=b%2*40961

(man beachte die ausnutzung der operator-precedence und der links-vor-rechts-ausführung. Deshalb muss auch %2 verwendet werden anstatt &1, sonst wären klammern nötig, und die kosten bekanntlich zeichen 😉)
was kürzer ist und kein ":0" am ende hat 8)
Ach und die 8fach-durchlaufende schleife geht anstatt:

for(j=8;j;j--)
//auch kürzer mit
for(j=9;j--;)

solange der index irrelevant ist.

macht also anstatt


for(j=8;j;j--,b=c^d,c/=2,d/=2,b&1?c^=40961:0);
//jetzt
for(j=9;j--;c/=2,d/=2,c^=b%2*40961)b=c^d;

wenn man eine der Anweisungen noch rauszieht.
Das sind 5 gesparte Zeichen ! 👍
Hoffentlich hab ich jetzt keinen Fehler gemacht. Aber DAS wäre CodingStyleHorrer, alles andere ist Kinderkram 8)
beste Grüße
zommi

Gelöschter Account
vor 14 Jahren

das sieht schon fast wie brainfuck aus 😃

F
240 Beiträge seit 2006
vor 14 Jahren

also mein brain fuckt es definitiv 😉

1.130 Beiträge seit 2007
vor 14 Jahren

Wo wir schon bei absichtlichem horror sind: Coderätsel: Was macht dieses Programm?

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

5.299 Beiträge seit 2008
vor 14 Jahren
Coding-Horror?

Ich grübel grad über die Bedeutung folgenden im Reflector gefundenen Codes (class ListBindingHelper):


private static PropertyDescriptorCollection GetListItemPropertiesByType(Type type, PropertyDescriptor[] listAccessors, int startIndex)
{
    Type propertyType = listAccessors[startIndex].PropertyType;
    startIndex++;
    if (startIndex >= listAccessors.Length)
    {
        return GetListItemProperties(propertyType);
    }
    return GetListItemPropertiesByType(propertyType, listAccessors, startIndex);
}

Wird aufgerufen mit startIndex 0 , z.B.:

return GetListItemPropertiesByType(type, listAccessors, 0);

sehe ich das richtig, dasses sich um eine kunstvoll endrekursive Formulierung von

private static PropertyDescriptorCollection GetListItemPropertiesByType(Type type, PropertyDescriptor[] listAccessors, int startIndex)
{
        return GetListItemProperties(listAccessors[listAccessors.Length-1].PropertyType);
}

handelt?

Der frühe Apfel fängt den Wurm.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo ErfinderDesRades,

ja, ich würde das so sehen, dass dein Formulierung äquivalent zu der Formulierung im Framework ist, vorausgesetzt es steht genug stack space zur Verfügung und startindex ist nicht out of range.

herbivore

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo zusammen

Ein Kunstwerk:


int error = 0;

try {
    // <Ganz böser[tm] Code :-)
}
catch
{
    error++;
}

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

S
8.746 Beiträge seit 2005
vor 14 Jahren

Ist doch toll. Wer Fehler zählt, statt sie zu behandeln, hat echt ein dickes Fell. Respekt. 😉

72 Beiträge seit 2008
vor 14 Jahren

Hmm,

der einzige "Horror" ist, daß die abzufangende Exception nicht spezifiziert ist - ansonsten hätte ich mindestens einen sinnvollen Einsatzzweck für ein solches Konstrukt: Die TimeoutException beim SerialPort.

Allerdings sehe ich den Horror bei einigen Beiträgen hier im Strang nicht - manches ist einfach nur Bad-By-Design und anderes würde ich auf Zeitdruck schieben. Wer immer perfekten Code schreibt werfe den ersten Stein ...

Auch ich habe diese Woche mindestens 2 mal Code geschrieben der hier im Thread wahrscheinlich als "Horror" angesehen würde - aber wenn die Produktion auf ein Tool wartet und der Entwickler nicht mehr da ist habe ich nur zwei Möglichkeiten - schnell nen Fehler "unsauber" beseitigen und riskieren hier zu landen oder 20 Leuten sagen zu müssen das sich eine Serieneinführung eines Produktes leider wegen eines aufwendigen Code Reviews um 2 Tage verschiebt und das dem Unternehmen Kosten in Höhe von 200.000 Euro beschert. Die Entscheidung fällt da leicht ...

Sowas:


++x += –x *= ++x -= -x; // Mal im INet gefunden

ist Horror oder eine Applikation die eine serielle Kommunikation in etwa so realisiert:


port.DataReceived -= new System.IO.Ports.SerialDataReceivedEventHandler(this.port_DataReceived);
port.Writeline("blablabla";);
Thread.Sleep(1000);
string data = port.ReadLine();
port.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.port_DataReceived);

und das geschätzte 500 mal innerhalb der Applikation.
Auch sehr beliebt ist es eine Applikation die via Knopfdruck USB Daten austauscht um eine automatische Abfrage zu erweitern welche sich nicht mit der manuellen Abfrage synchronisiert. Der Anwender darf dann das beliebte "Hoffentlich hats geklappt" Lotto spielen wenn er Manuell Daten senden oder empfangen möchte.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo LuckyGeorge,

Wer immer perfekten Code schreibt werfe den ersten Stein ...

hm, es geht ja hier in erster Linie um den Spaß und in zweiter Linie um den Lerneffekt. Und nicht um das Anprangern der Autoren und schon gar nicht als Person.

herbivore