Laden...

Coding Styles Horror

Erstellt von Khalid vor 15 Jahren Letzter Beitrag vor 3 Jahren 364.669 Views
4.506 Beiträge seit 2004
vor 14 Jahren

Hallo Junky,

public bool IsMatch(string name)  
{  
    return (IsIncluded(name) == true) && (IsExcluded(name) == false);  
}  

Das kann aber unter Umständen sogar Sinn machen. Wenn intern 2 Listen geführt werden (inc und exc). Ähnlich wie bei Firewallregeln, die expliziten Angaben vor impliziten Angaben überprüfen.

Aber ich gehe jetzt einfach mal davon aus, dass das hier nicht der Fall ist, dann ist diese Abfrage natürlich doppeltgemoppelt.

Grüße
Norman-Timo

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

1.564 Beiträge seit 2007
vor 14 Jahren

Ich präsentiere das Monolith-Pattern (siehe Bild)...

Die Menge an Zeilen verteilt sich dann gleichmäßig auf:
* 28 Public Fields (nix Properties)
* 50 Public Properties
* 318 Public Methoden

8o

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ß.

I
279 Beiträge seit 2008
vor 14 Jahren

Ich präsentiere das Monolith-Pattern (siehe Bild)...

Die Menge an Zeilen verteilt sich dann gleichmäßig auf:
* 28 Public Fields (nix Properties)
* 50 Public Properties
* 318 Public Methoden

WTF!!! Jetz würde mich aber mal interessieren was ein "Monolith"-Pattern ist, hab schon gegooglet aber nix gefunden. Ist das die "Eierlegende-Woll-Milch-Sau" unter den Klassen? xD

1.564 Beiträge seit 2007
vor 14 Jahren

Naja, als echtes Pattern gibt's dass - hoffentlich - nicht 😉. Ein Monolith ist eigentlich ein sehr großer zusammenhängender Stein. In der Software spricht man von Monolithen im Fall von "Eierlegenden Woll-Milch-Säuen".

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ß.

5.941 Beiträge seit 2005
vor 14 Jahren

Salute Florian

Natürlich ist es eines: Ein Anti-Pattern 😃

Gruss Peter

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

Gelöschter Account
vor 14 Jahren

ich hab da was, dagegen wirkt dein monolith wie eine kleine ameise....

(echt kein fake.. ich bekomme eine out of memory exception wenn ich die datei mit resharper aufmache...)

edit: ach ja und das ist zwar der größte aber nciht der einzige monolith hier...

1.564 Beiträge seit 2007
vor 14 Jahren

Servus Peter

Auch wieder wahr. 🙂
(Wird hier an vielen Stellen gelebt...)

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ß.

1.564 Beiträge seit 2007
vor 14 Jahren

ich hab da was, dagegen wirkt dein monolith wie eine kleine ameise....

OMG! Eine Klasse?? Wir haben auch Files mit 100,000 Zeilen und mehr, aber das sind dann automatisch erzeugte (von unserem O/R-Mapper) mit hunderten Klassen.

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ß.

Gelöschter Account
vor 14 Jahren

ja, eine klasse, die aber viele nested classes hat, welche wiederrum viele nested classes haben... usw. das ist wirklich eine eierlegende wollmilchsau... ich frage mich nur, wie ich dort debuggen soll, da ich schon beim scrollen große performanceprobleme habe...

U
1.578 Beiträge seit 2009
vor 14 Jahren

die regions zuklappen ? #gg

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo Mr Evil

#regions sind böse, vorallem wenn man sie dann so benutzt 😃

Gruss Peter

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

D
211 Beiträge seit 2006
vor 14 Jahren

Warum sind Regions denn böse, ich find die gut, toller Strukturmechanismus

Gruß

DevHB

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo DevHB

Weil sie dazu verleiten, grosse Dateien anzulegen.
Dateien (Typen) sollten möglichst klein gehalten werden, mehr dazu findest du im Buch "Cleancode".

Gruss Peter

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

6.911 Beiträge seit 2009
vor 14 Jahren

Hallo,

Regions können IMHO sehr praktisch sein um den Code zu gliedern. Es ist allerdings Disziplin bei der Verwendung gefragt (um obiges zu vermeiden).( Das ist wie beim Messer - kann hilfreich aber auch gefährlich sein 😉

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!"

D
211 Beiträge seit 2006
vor 14 Jahren

Weil sie dazu verleiten, grosse Dateien anzulegen.
Dateien (Typen) sollten möglichst klein gehalten werden, mehr dazu findest du im Buch "Cleancode".

Hmm, kann ich nicht nachvollziehen, kann aber gut sein.
Muss gfoidl da eher zustimmen, grundlegend zu sagen, #regions sind böse halte ich auch für ein wenig überzogen.

Gruß

DevHB

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo DevHB

Na klar ist es überzogen, muss es ja sein, wenn man jemandem zum Nachdenken bringen möchte.
Ich fand sie früher auch ganz nett und toll, aber wenn du nur noch kleine Dateien / Typen hast, brauchst du sie gar nicht mehr.

Gruss Peter

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

5.742 Beiträge seit 2007
vor 14 Jahren

Hatten wir da nicht schonmal eine Diskussion dazu? 👅

1.002 Beiträge seit 2007
vor 14 Jahren

Hallo zusammen,

es gibt ja auch noch eine gewisse sinnvolle Grauzone zwischen der Gliederung einer Klasse mit mehr als 550000 Zeilen und der #region-Abstinenz.
Regionen tragen meiner Meinung nach wirklich sehr zur Übersichtlichkeit einer Klasse bei, wenn durch sie Eigenschaften, Konstruktoren und Methoden getrennt werden, aber das ist hier nun wirklich nicht mehr das Thema 😃.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

S
469 Beiträge seit 2007
vor 14 Jahren

*lol*
Also im Netz findet man zig zum Teil richtig lustige Artikel zum Thema "regions", die, so die Ansicht mancher, von Satan in den C# Sprachumfang eingefügt wurden, da sind richtige Kampagnen dabei nach dem Motte "Just say no to regions!" (<- einfach mal danach googeln) lol
Am witzigsten finde ich immer die Argumente, man hätte doch partial classes um Code aufzusplitten und diverse Tools, um Properties und Funktionen etc. zu gliedern. Was ich daran immer so witzig finde? Dass das Hauptargument derselben Leute gegen regions ist, der Code würde zu lang. Ja wenn er denn so kurz ist, dann brauche ich weder partial classes (die für mich nichts anderes sind als regions in Dateiform) noch Tools um mich zurechtzufinden...Genauso könnte man sagen man darf Funktionen nicht mehr zuklappen, denn wenn man das muss dann sind sie zu lang 😕
Schmunzeln musste ich auch über einen Kommentar auf einer englischsprachigen Seite, da meinte einer, er hätte einen Kollegen, der viele evil regions benutzen würde, aber es wäre kein Wunder, weil der Kollege wäre schließlich ein Deutscher 😉

Ich stimme gfoidl voll und ganz zu. Wenn man schlechten und überlangen Code mit Regions versteckt, ist das ein Mangel an Selbstdisziplin und ein Missbrauch der Regions. Wenn jemand Angst hat schlechteren Code zu schreiben wenn er sie benutzt...bitte (meine Erfahrung bisher war die, dass die Kollegen-Codes, die regions benutzt haben, allesamt besser gegliedert und übersichtlicher waren wie die, die keine regions benutzt haben)){gray}.

gruß
sth_Weird

++++++++++++++++++++~+
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht


Linux is for free...if your time is worth nothing
++++++++++++++++++++~+

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo sth_Weird

Meine Aussage sollte eigentlich sein:
Ja, ich habe Regions früher auch benutzt und geschätzt, aber mit Cleancode braucht man diese schlicht und ergreifend nicht mehr.

Partial Classes werden auch viel missverstanden und missbraucht, diese sind "eigentlich" nur dazu da, um autogenerierten Code von eigenen Änderungen physikalisch zu trennen.

Gruss Peter

[EDIT=herbivore]Nehmt das mal als Schlusswort. Man kann es mit offtopic auch übertreiben.[/EDIT]

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

J
237 Beiträge seit 2008
vor 14 Jahren

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.

R
234 Beiträge seit 2007
vor 14 Jahren

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;
}

// ...

1.564 Beiträge seit 2007
vor 14 Jahren

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ß.

X
1.177 Beiträge seit 2006
vor 14 Jahren

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!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

2.760 Beiträge seit 2006
vor 14 Jahren

ist doch korrekt nach IEEE-754

Aber nicht korrekt nach DIN_1333 😉

U
208 Beiträge seit 2008
vor 14 Jahren

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. 😁

1.002 Beiträge seit 2007
vor 14 Jahren

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

1.564 Beiträge seit 2007
vor 14 Jahren
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ß.

U
208 Beiträge seit 2008
vor 14 Jahren

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

4.506 Beiträge seit 2004
vor 14 Jahren

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

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

183 Beiträge seit 2006
vor 14 Jahren

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 😉

T
415 Beiträge seit 2007
vor 14 Jahren

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)

Gelöschter Account
vor 14 Jahren

@t2t :

nein eben so geht es nicht. siehe: [FAQ] Double und Float: Fehler beim Vergleich und Rundungsfehler

S
401 Beiträge seit 2008
vor 14 Jahren

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

6.862 Beiträge seit 2003
vor 14 Jahren

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.

888 Beiträge seit 2007
vor 14 Jahren

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
             {}

1.564 Beiträge seit 2007
vor 14 Jahren

Grad hier im Forum gefunden...

Nennt sich Speed-Up Loop 👅

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ß.

H
154 Beiträge seit 2007
vor 14 Jahren
... das schlimmste

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.. 😃

799 Beiträge seit 2007
vor 14 Jahren

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
2.760 Beiträge seit 2006
vor 14 Jahren

Das Hat aber mehr mit Projektmanagement als mit Coding zu tun.

Nein, das ist Coding Styles Horror 😉

R
234 Beiträge seit 2007
vor 14 Jahren

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).

6.911 Beiträge seit 2009
vor 14 Jahren

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!"

6.911 Beiträge seit 2009
vor 14 Jahren

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!"

Gelöschter Account
vor 14 Jahren

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

X
1.177 Beiträge seit 2006
vor 14 Jahren
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

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

S
401 Beiträge seit 2008
vor 14 Jahren

@ 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

467 Beiträge seit 2007
vor 14 Jahren

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 truetrue 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.

795 Beiträge seit 2006
vor 14 Jahren

@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"`
X
1.177 Beiträge seit 2006
vor 14 Jahren

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.

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

U
1.688 Beiträge seit 2007
vor 14 Jahren

Hallo,

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 : "");

😁