Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Coding Styles Horror
JasonDelife
myCSharp.de - Member



Dabei seit:
Beiträge: 237
Herkunft: Anywhere in Worldwide BW ;)

beantworten | zitieren | melden

Hier mal was in Java

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++;
}
Also Logik sieht anders aus...
Found here: http://www.jroller.com/ethdsy/entry/code_looses_sense_with_time

EDIT: Ich dachte ich hätte C#-Tags verwendet...
Grüße, JasonDelife.
Beim Programmieren löst man die Probleme, die man nicht hätte, programmierte man nicht.
private Nachricht | Beiträge des Benutzers
rastalt
myCSharp.de - Member



Dabei seit:
Beiträge: 234

beantworten | zitieren | melden

Habe gerade folgendes bei uns entdeckt:


object oID = (int)this.ID; // this.ID ist object
int id = -1;
if(oID is int) {
	id = (int)oID;
}

// ...
private Nachricht | Beiträge des Benutzers
Florian Reischl
myCSharp.de - Experte

Avatar #avatar-2880.jpg


Dabei seit:
Beiträge: 1.564
Herkunft: München

beantworten | zitieren | melden

Ist jetzt nicht wirklich Horror (finde ich jedenfalls, ist nämlich von mir ). Fällt vielleicht eher in den Bereich "Coding For Fun", aber ich glaube dazu gibt's hier keinen eigenen Thread.

Wir hatten damals eine Anforderung dass recht umständlich anhand bestehender Status-Informationen ein neuer Status berechnet werden sollte, dabei war es jedoch möglich dass das Ergebnis uneindeutig ist. Laut Kunde war's dann egal welcher Status als gültig betrachtet würde.

Zur gleichen Zeit waren damals in Amerika die Wahlen bei denen G. Bush recht seltsam Präsident wurde (ich meine das erste mal :evil: ). Irgendwie konnte ich's mir nicht verkneifen die ganze Sache als getürkten Wahlkampf zu implementieren.

(ist c++ und der Urnengang ist an der Stelle schon abgeschlossen )

/*
 * Get the majority of the voting.
 * If we got a tie the democratics will win (we are not in the US)
 */
CStatusVoting* pDemocratics = NULL;
CStatusVoting* pRepublicans = NULL;
for (i = 0; i < aVotingResult.GetSize(); i++)
{
   CStatusVoting* pMajority = aVotingResult[i];

   if (pDemocratics == NULL)
   {
      pDemocratics = pMajority;
   }
   else
   {
      if (pDemocratics->m_i4Count < pMajority->m_i4Count)
      {
         pDemocratics = pMajority;
         pRepublicans = NULL;
      }
      else if (pDemocratics->m_i4Count == pMajority->m_i4Count)
      {
         pRepublicans = pMajority;
      }
   }
}


if (pDemocratics == NULL)
{
   /*
    * If we had no relevant Status (nobody voted for our requested status :-( )
    * Set a hard coded status
    */
   //m_pDesAdv->AddStatus(PACT_MS_DEL_DEL, 251, m_xtPodDate, m_xsSigner, m_xsRemark, TRUE);
}
else
{
   // ...

Grüße
Flo
Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.
private Nachricht | Beiträge des Benutzers
Xynratron
myCSharp.de - Member



Dabei seit:
Beiträge: 1.177

beantworten | zitieren | melden

Zitat von Florian Reischl
Schon mal versucht?

double d = 2.5;
Console.WriteLine(Math.Round(d, 0));

ist doch korrekt nach IEEE-754. Aber es ist natürlich nicht das (vereinfachte) Runden aus der Schule.
Herr, schmeiss Hirn vom Himmel - Autsch!
Zitat von herbivore
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
private Nachricht | Beiträge des Benutzers
jaensen
myCSharp.de - Experte

Avatar #avatar-2657.png


Dabei seit:
Beiträge: 2.760
Herkunft: München

beantworten | zitieren | melden

Zitat
ist doch korrekt nach IEEE-754
Aber nicht korrekt nach DIN_1333 ;-)
private Nachricht | Beiträge des Benutzers
userid12529
myCSharp.de - Member



Dabei seit:
Beiträge: 208

beantworten | zitieren | melden

Zitat von Xynratron
ist doch korrekt nach IEEE-754. Aber es ist natürlich nicht das (vereinfachte) Runden aus der Schule.
Argh, das erinnert mich an ein Problem das ich bei einer Anwendung kürzlich hatte. Da wollte ich berechnete Beträge auf zwei Nachkommastellen runden und

double d = ... // Berechnung des Werts
d = Math.Round(d, 2);
hat nicht so gerundet wie ich es erwartet hab (so wie man es eben in der Schule lernt (DIN_1333 ist das offenbar)).

Hab mir dann mit

d = (double)d.ToString("0.00");
geholfen, das hat funktioniert. :D
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1.002

beantworten | zitieren | melden

Hallo Isaac,

warum nicht einfach

double d = 2.5;
d = Math.Round(d, 2, MidpointRounding.AwayFromZero);
verwenden :)? Oder hast du das dann später?

m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers
Florian Reischl
myCSharp.de - Experte

Avatar #avatar-2880.jpg


Dabei seit:
Beiträge: 1.564
Herkunft: München

beantworten | zitieren | melden

Zitat von m0rius

double d = 2.5;
d = Math.Round(d, 2, MidpointRounding.AwayFromZero);
Das gab's als ich's gebraucht habe (.NET 1.1) nicht. Workaround war aber trotzdem nicht das riesen Problem:

double d = 2.5;

double d2 = Math.Floor(d);
if (d - d2 ≥ 0.5)
   Console.WriteLine("Result: {0}", d2 + 1);
else
   Console.WriteLine("Result: {0}", d2);
Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.
private Nachricht | Beiträge des Benutzers
userid12529
myCSharp.de - Member



Dabei seit:
Beiträge: 208

beantworten | zitieren | melden

Hallo m0rius,

ich hab noch genau in Erinnerung, dass ich das ausprobiert hatte, bei einigen Testzahlen aber trotzdem zu falschen Ergebnissen kam, weshalb ich mir eben mit ToString() geholfen hatte. Kann jetzt das Problem aber auch gar nicht rekonstruieren, mit meinen Tests eben hat alles funktioniert... Sehr seltsam.

Grüße,

Isaac
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4.506
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

[offtopic]Hallo zusammen,

konnte man das Runden nicht immer mittels:


double d= 2.5;
int roundedVal = Math.Round(d+0.5);

ermitteln?

Grüße
Norman-Timo
[/offtopic]
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von norman_timo am .
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
private Nachricht | Beiträge des Benutzers
VuuRWerK
myCSharp.de - Member

Avatar #avatar-2424.gif


Dabei seit:
Beiträge: 183
Herkunft: Dresden

beantworten | zitieren | melden

Auch hier wieder ein klassisches Beispiel für "Von hinten durch die Brust", und dazu noch völlig am Thema vorbei ...
(Borland)C++:

try
{
  Application->Initialize();
  Application->CreateForm(__classid(TFormMain), &FormMain);
  Application->CreateForm(__classid(TDataModuleAccess), &DataModuleAccess);
  Application->Run();
}
catch (Exception &exception)
{
  Application->ShowException(&exception);
}
catch (...)
{
  try
  {
    throw Exception("");
  }
  catch (Exception &exception)
  {
    Application->ShowException(&exception);
  }
}

Gut Schuß
VuuRWerK ;)
private Nachricht | Beiträge des Benutzers
t2t
myCSharp.de - Member



Dabei seit:
Beiträge: 415
Herkunft: Hamburg

beantworten | zitieren | melden

[offtopic]
Zitat von norman_timo
konnte man das Runden nicht immer mittels:


double d= 2.5;
int roundedVal = Math.Round(d+0.5);

ermitteln?

Ganz richtig. Noch einfacher gehts auch so:


double d= 2.5;
int roundedVal = (int)(d+0.5);

;o)

[/offtopic]
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

@t2t :

nein eben so geht es nicht. siehe: [FAQ] Double und Float: Fehler beim Vergleich und Rundungsfehler
Siassei
myCSharp.de - Member



Dabei seit:
Beiträge: 401

beantworten | zitieren | melden

Servus,

heute ist mir ein klassiger, leider in C++, untergekommen.
Hinweis: size_t ist als unsigned int definiert
//...
for(size_t i = CharLength; i≥0; i--)
{
  // ...
}
// Diese Stelle wird die Schleife nie erreichen.
// i < 0 tritt niemals ein,

Diese Optimierung ist in C++ sowieso nicht nötig, da dies jeder Compiler macht, aus im Debug-Modus.

Gruß,
Thomas
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

Naja, das ist aber auch nen dämlicher Fehler der nur in Sprachen mit typedefs und Präprozessor der Defines erlaubt, vorkommen kann... In C# ist so ein Fehler nicht möglich (praktisch natürlich schon, aber ungemein leichter zu finden da der Typ ja direkt dasteht)
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers
Joetempes
myCSharp.de - Member

Avatar #avatar-3309.jpg


Dabei seit:
Beiträge: 888
Herkunft: Germany

beantworten | zitieren | melden

Grad hier im Forum gefunden:
Zugriff auf die COM-Schnittstelle löst UnauthorizedAccessException aus


for(int i=0; i<30000;i++)  //30sec. mit Zählen beschäftigen
             {}
private Nachricht | Beiträge des Benutzers
Florian Reischl
myCSharp.de - Experte

Avatar #avatar-2880.jpg


Dabei seit:
Beiträge: 1.564
Herkunft: München

beantworten | zitieren | melden

Zitat von Joetempes
Grad hier im Forum gefunden...
Nennt sich Speed-Up Loop :tongue:
Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.
private Nachricht | Beiträge des Benutzers
HappyLil
myCSharp.de - Member



Dabei seit:
Beiträge: 154
Herkunft: Schweiz

... das schlimmste

beantworten | zitieren | melden

das schlimmste das ich je gesehen habe war eine Methode die 1436 Zeilen lang war. es war absolut unmöglich da noch irgendwie was zu ändern, sprich einen Kundenwunsch zu implementieren. das war der nackte Horror.
Schlimm an der Geschichte war, das der Programmierer überhaupt nicht verstehen konnte worüber ich mich aufrege als ich ihm erklärt habe, diese methode augenblicklich zu bereinigen. nein er hat es nicht verstanden.
dafür hat er ein exception handling gemacht, wie es detaillierter nicht sein könnte.
Ich glaube er hat sogar die Mondphasen mit einbezogen.. :-)
private Nachricht | Beiträge des Benutzers
der-schlingel
myCSharp.de - Member

Avatar #avatar-3239.jpg


Dabei seit:
Beiträge: 799
Herkunft: Österreich/Wien

beantworten | zitieren | melden

Zitat
Nennt sich Speed-Up Loop

Das kenn ich mit Backup-Memory. Am Anfang unnötige MB reservieren und falls Not am Mann ist, löscht man sie wieder. Das Hat aber mehr mit Projektmanagement als mit Coding zu tun.
As a man thinketh in his heart, so he is.
- Jun Fan
Es gibt nichts Gutes, außer man tut es.
- Erich Kästner
Krawutzi-Kaputzi
- Kasperl
private Nachricht | Beiträge des Benutzers
jaensen
myCSharp.de - Experte

Avatar #avatar-2657.png


Dabei seit:
Beiträge: 2.760
Herkunft: München

beantworten | zitieren | melden

Zitat von der-schlingel
Das Hat aber mehr mit Projektmanagement als mit Coding zu tun.
Nein, das ist Coding Styles Horror ;-)
private Nachricht | Beiträge des Benutzers
rastalt
myCSharp.de - Member



Dabei seit:
Beiträge: 234

beantworten | zitieren | melden

Zitat von der-schlingel
Am Anfang unnötige MB reservieren und falls Not am Mann ist, löscht man sie wieder.

Erinnert mich an Dirty Coding Tricks, The Programming Antihero (auf Seite 4).
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.860
Herkunft: Waidring

beantworten | zitieren | melden

Und ist in .net dank Müllsammler gar nicht nötig ;)


mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.860
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,

warum einfach wenns auch kompliziert geht ;)


int i =
	Convert.ToInt32(
	Double.Parse(
	String.Format("{0:0.00}", d)));
Quelle: http://www.codeproject.com/KB/recipes/colorspace1.aspx#xyz2 (leserlicher gemacht, sonst original).


mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

wir haben hier eine methode mit einer Cyclomatischen Komplexität von 108 !!!!

ich hätte nie gedacht das ich das mal erlebe das die 100er marke gesprengt wird.... und ich darf die nciht mal refactoren...
Xynratron
myCSharp.de - Member



Dabei seit:
Beiträge: 1.177

beantworten | zitieren | melden

if (b1== true == true && b2== true)
  reifen += s1+ " " + s5+ " " + s2;
else if (b1== true & b2== false)
  reifen += s1;
else if (b1== false && b2== true)
  reifen += s5+ " " + s2;

(Variablennamen geändert)

:-)

Xynratron
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Xynratron am .
Herr, schmeiss Hirn vom Himmel - Autsch!
Zitat von herbivore
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
private Nachricht | Beiträge des Benutzers
Siassei
myCSharp.de - Member



Dabei seit:
Beiträge: 401

beantworten | zitieren | melden

@ Xynratron

Was findest du daran so schlimm? Gut, dass "true == true" ist wohl etwas übertrieben, aber das kann schon mal passieren. Stress, langer Arbeitstag, ....

Gut, true sollte man nicht verwenden. Aber wenn jemand seinen Code so besser versteht, dann soll er das machen. Der Compiler sollte immer den gleichen Code erzeugen. Oder ist das beim MS-Compiler nicht so?

Gruß,
Thomas
private Nachricht | Beiträge des Benutzers
ANSI_code
myCSharp.de - Member

Avatar #avatar-2839.jpg


Dabei seit:
Beiträge: 467
Herkunft: Bayern

beantworten | zitieren | melden

Also für mich ist das "==true" wirklich ein Gräuel, das die Abfragen laaaaaaaaaaang und

"unv"+""+""+"erst"+"zweit"-"zweit"+"ändlich"-"ch"+"g"
macht. Von ==true==true will ich gar nicht anfangen.
Mal ehrlich: wer findet das nicht viel klarer:


if (b1 && b2)
  reifen += s1+ " " + s5+ " " + s2;
else if (b1 && !b2)//da fehlte ein &
  reifen += s1;
else if (!b1 && b2)
  reifen += s5+ " " + s2;

kann man noch umschreiben zu

            if (b1)
            {
                if(b2)
                    reifen += s1 + " " + s5 + " " + s2;
                else
                    reifen += s1;
            }
            else if(b2)
                reifen += s5 + " " + s2;
was ich als klarer empfinde.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von ANSI_code am .
private Nachricht | Beiträge des Benutzers
TheBrainiac
myCSharp.de - Member

Avatar #avatar-3152.png


Dabei seit:
Beiträge: 795
Herkunft: /dev/null

beantworten | zitieren | melden

@ANSI_code:
Zitat von ANSI_code
...kann man noch umschreiben zu

            if (b1)
            {
                if(b2)
                    reifen += s1 + " " + s5 + " " + s2;
                else
                    reifen += s1;
            }
            else if(b2)
                reifen += s5 + " " + s2;

Was man dann wiederum umschreiben kann zu

if (b1)
{
    reifen += s1;

    if(b2)
    {
        reifen += " ";
    }
}

if(b2)
{
    reifen += s5 + " " + s2;
}

was man dann wiederum umschreiben kann zu....
was man dann nocheinmal umschreiben kann zu.... :evil:

@Xynratron:
Jeder schreibt seine Code so, wie er ihn gerade braucht und auf seinem eigenen Kenntnisstand / seiner eigenen Entwicklung basierend. Wenn der Autor den Code in zwei Jahren sieht, weiß er vielleicht auch ein, zwei Wege, wie es eleganter gegangen wäre.

@Siassei:
Aber im Großen und Ganzen hast du recht. Ich bin auch der Meinung, == true ist nicht gerade gut lesbar und auch nicht schön (wobei "Schönheit" gerade beim Coding Style Definitionssache ist), aber Coding Styles Horror würde ich es nicht nennen.

Gruß, Christian.
There are 10 types of people in the world:
Those, who think they understand the binary system
Those who don't even have heard about it
And those who understand "Every base is base 10"
private Nachricht | Beiträge des Benutzers
Xynratron
myCSharp.de - Member



Dabei seit:
Beiträge: 1.177

beantworten | zitieren | melden

naja, lasst mal die Kirche im Dorf. In dem Code waren definitiv 2 Fehler:

b1 == true == true

b1 & b2

ob == true/false jetzt gut oder schlecht ist. Naja ohne ist es für mich besser zu lesen.

Ich dachte da wäre in meinem Posting noch der Satz "Da hat wohl jemand was gelöscht" über dem Coding-Horror-Zitat gestanden, (lt. einem Kollegen hat das wohl auch der Wahrheit entsprochen) gestanden^^ Das hätte zumindest das "== true == true" erklärt.

Eine Lösung wäre übrigens:


if (b1)
{
  if (b2)
  {
    reifen += s1+ " " + s5+ " " + s2;
  }
  else 
  { 
    reifen += s1;
  }
}
else 
{
  if (b2)
  {
    reifen += s5+ " " + s2;
  }
  else
  {
    //nothing ToDo
  }
}

Imho sehr schön zu lesen und auch klar was nicht passiert, aber umständlich zu schreiben.

:-)

Xynratron

Edith + PS: die { } verlängern zwar den Code hier, verdeutlichen aber hoffentlich was ich meine. Ohne wäre diese Routine noch lesbarer (s.o. bei ANSI_code)

PPS: Hab oben einen Satz etwas präzisiert. Nicht das jemand denkt, mir wäre ein ganzes Posting abhanden gekommen.
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Xynratron am .
Herr, schmeiss Hirn vom Himmel - Autsch!
Zitat von herbivore
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
private Nachricht | Beiträge des Benutzers
ujr
myCSharp.de - Experte



Dabei seit:
Beiträge: 1.688

beantworten | zitieren | melden

Hallo,
Zitat von Xynratron
In dem Code waren definitiv 2 Fehler:...

b1 & b2

Naja - korrekterweise muss man sagen, dass das '&' nicht zu einem falschen Ergebnis geführt hat (das wäre wahrscheinlich auch schon vorher aufgefallen). Es wurde eben nur die Kurzschlussauswertung außer Kraft gesetzt.

Trotzdem sieht der Code grauenhaft aus - denn eigentlich reicht ein Einzeiler:


reifen += b1 ? (b2 ? s1 + " " + s5 + " " + s2 : s1) : (b2 ? s5 + " " + s2 : "");

private Nachricht | Beiträge des Benutzers