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!”
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ß.
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
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ß.
Salute Florian
Natürlich ist es eines: Ein Anti-Pattern 😃
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
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...
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ß.
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ß.
die regions zuklappen ? #gg
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
Warum sind Regions denn böse, ich find die gut, toller Strukturmechanismus
Gruß
DevHB
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
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!"
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
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
Hatten wir da nicht schonmal eine Diskussion dazu? 👅
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
*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
Linux is for free...if your time is worth nothing
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht
++++++++++++++++++++~+
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
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.
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;
}
// ...
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ß.
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.
ist doch korrekt nach IEEE-754
Aber nicht korrekt nach DIN_1333 😉
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. 😁
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
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ß.
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
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!”
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 😉
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)
@t2t :
nein eben so geht es nicht. siehe: [FAQ] Double und Float: Fehler beim Vergleich und Rundungsfehler
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
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.
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
{}
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ß.
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.. 😃
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.
Das Hat aber mehr mit Projektmanagement als mit Coding zu tun.
Nein, das ist Coding Styles Horror 😉
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).
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!"
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!"
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...
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.
@ 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
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.
@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.
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.
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 : "");
😁