Ok, sorry. War nur nach der Woche ein wenig angepisst da ich 4 Apps von 3 verschiedenen Entwicklern fixen musste und froh gewesen wäre, wenn die "Fehler" nur in solchen try..catch Blöcken oder endlos verschachtelten if Abfragen zu finden gewesen wären ... da verstehe ich ja wenigstens was der Entwickler wollte.
Also, ich wollte niemanden zu nahe treten.
Aber ein "Schmuckstück" dieser Woche wollte ich dann doch noch teilen:
bool parseData(SerialPort port)
{
port.DiscardInBuffer();
try
{
if(port.ReadLine().Contains("* blablabla1 *)) parseData(port);
else if(port.ReadLine().Contains("* blablabla2 *)) parseData(port);
else if(port.ReadLine().Contains("* blablabla3 *)) parseData(port);
else if(port.ReadLine().Contains("* blablabla4 *)) parseData(port);
else if(port.ReadLine().Contains("* blablabla5 *)) parseData(port);
else if(port.ReadLine().Contains("* blablabla6 *)) return true;
}
catch(TimeOutException) { return false; }
}
Und der Entwickler fragt mich noch warum das so nicht funktioniert ....
Hi @ All!
Musste grade mal lachen 😄.
Habe Folgendes grade in den DotNetNuke-Sources gefunden (gekürzt, DNN ist in VB geschrieben) 🤔:
Try
If Not something.TryGetValue(...) Then
Throw New System.Exception
End If
Catch ex As Exception
Throw New System.Exception
End Try
Äquivalent in C#:
try
{
if (something.TryGetValue(...))
throw new Exception();
}
catch (Exception ex)
{
throw new Exception();
}
Man beachte das TryGetValue
und das unnötige doppelte throw
...
Gruß, Christian.
Äquivalent in C#
Du hast das "Not" in if (something.TryGetValue(...))
vergessen.
So ist es aber noch interessanter - dann kommt man nur da durch, wenn der Wert OHNE Fehler NICHT konvertiert werden konnte 😁
Gruß,
dN!3L
Was kennt ihr denn alles für Leute das ihr an solch exotischen Code kommt? Einige von den Urhebern sollten doch besser Baumwollpflücker werden xDD
Das einzige was ich nicht verstehe ist was an ++i schlimm seien soll? solange das wärend einer operation benuzt wird is doch alle okay?
Ich hätte hier auch noch eine(!) schöne Zeile Code:
newApp.Description += " ["+tempArt+"] "+ ((myProperties.BeschriftungAE==FormEinstellungen.BeschriftungenAE.Langtext) ? "\r\n" : "") + ((AEPos.ID_Beleg!="" && AEPos.ID_Beleg!=null) ? ("("+AEPos.ID_Beleg+") ") : ((AEPos.ID_Rechnung!="" && AEPos.ID_Rechnung!=null) ? ("("+ AEPos.ID_Rechnung+") ") : "")) + ((AEPos.AEPosDL.Text!="" && (tempArt=="IN" || myProperties.BeschriftungAE==FormEinstellungen.BeschriftungenAE.Langtext)) ? ((myProperties.BeschriftungAE!=FormEinstellungen.BeschriftungenAE.Langtext && AEPos.AEPosDL.Text.Length>60) ? (AEPos.AEPosDL.Text.Substring(0,60).Replace("\r\n",", ").Replace("- ","")+"...") : AEPos.AEPosDL.Text) : AEPos.KurzBeschr) +"\r\n";
Gruß,
dN!3L
Das einzige was ich nicht verstehe ist was an ++i schlimm seien soll? solange das wärend einer operation benuzt wird is doch alle okay?
An ++i
ist erstmal gar nichts schlimm. Allerdings ist die Kombination i = ++i
ziemlich überflüssig, da man statt dessen auch einfach i++
schreiben kann.
Das einzige was ich nicht verstehe ist was an ++i schlimm seien soll? solange das wärend einer operation benuzt wird is doch alle okay?
An
++i
ist erstmal gar nichts schlimm. Allerdings ist die Kombinationi = ++i
ziemlich überflüssig, da man statt dessen auch einfachi++
schreiben kann.
achso xD na dann habi nix gesagt.. oh man
Java Code:
//....Code.....
String lvBeispiel = lvEinInteger.toString();
//...Code...... (mit lvBeispiel wurde nichts gemacht)
Integer lvEinInt = Integer.parseInt(lvBeispiel);
//weiterer Code
😁 😁 😁
//....Code..... String lvBeispiel = lvEinInteger.toString(); //...Code...... (mit lvBeispiel wurde nichts gemacht) Integer lvEinInt = Integer.parseInt(lvBeispiel); //weiterer Code
Ha, das mach ich immer, wenn meinem kleinen Neffen die morgendliche Milch zu heiss ist: umkippen von einer Tasse in die andere, immer hin und her (kühlt so ganz fix auf trinkbare Temperatur ab). Du siehst, das macht totaaaaal viel Sinn 😉.
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)
Hier mal wieder was für die Rubrik: "Warum einfach, wenns auch kompliziert geht":
public bool CheckSozialversicherungsnummer(DateTime? birthDate, string svnPrefix)
{
if (birthDate.HasValue)
{
StringBuilder sb = new StringBuilder(svnPrefix);
if (birthDate.Value.Day < 10)
{
sb.Append("0");
}
sb.Append(birthDate.Value.Day);
if (birthDate.Value.Month < 10)
{
sb.Append("0");
}
sb.Append(birthDate.Value.Month);
sb.Append(birthDate.Value.Year % 100);
return ValidateSozialversicherungsnummer(sb.ToString());
}
else
{
return false;
}
}
Hab das jetzt umgebaut (und richtiggestellt):
public bool CheckSozialversicherungsnummer(DateTime? birthDate, string svnPrefix)
{
if (birthDate.HasValue)
{
return ValidateSozialversicherungsnummer(svnPrefix + birthDate.Value.ToString("ddMMyy"));
}
else
{
return false;
}
}
und in der Validierungs-Funktion dann noch diese total unnötigen sachen:
// Check if the checksum equals the fourth digit
if (checksum != digits[3])
{
// No - this is NOT a valid SVN
return false;
}
// All tests passed
return true;
}
Hallo tkrasinger,
geht auch kürzer 😉
public bool CheckSozialversicherungsnummer(DateTime? birthDate, string svnPrefix)
{
return (birthDate.HasValue && ValidateSozialversicherungsnummer(svnPrefix + birthDate.Value.ToString("ddMMyy")));
}
Und noch weiter OT: Methoden, die Wahrheitswerte zurückgeben, sollten mit "is", "has" o.Ä. anfangen...
Gruß,
dN!3L
is klar, war nur ein zusammengekürztes Beispiel fürs Posten, die Methoden heißen im wirklichen Code anders und tun auch noch etwas mehr ...
Code von meinem direkten Vorgesetzten:
while(cfgObj != null)
{
//code
if(bedingung1) break;
//mehr Code
if(bedingung2) break;
//noch mehr Code
if(bedingung3) break;
return ergebnis;
}
ergebnis.DoSomethingElse();
return ergebnis;
Gesamtlänge des Codeblocks: 472 Zeilen.
Die Reaktion auf meinen zarten Hinweis, dass das nur eine vornehme Art und Weise ist, "goto" zu schreiben, führten zu einer Reaktion, die mich ernsthaft überlegen lässt, mir heut abend mal meine Bewerbungsunterlagen zusammenzusuchen...
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)
Hallo LaTino
Ohje. Und verständlich, wenn ich ehrlich bin.
Falls du die Firma verlässt, vergiss nicht ein DCD (Drecks Code Developer) T-Shirt dazulassen für deinen Cheffe 😉
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
DCC (Drecks Code Developer)
Das heißt dann doch DCD
Gruß pdelvo
Hallo pdelvo
Hab ich doch geschrieben? 😉
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Hä???
Entweder ich sollte mal zum augenartzt gehen, oder jemand hat an meinem Beitrag rumgefuscht 🤔
Edit: Okay. Du hast an meinem Beitrag rumgefuscht. Ich hatte das Antwortfenster noch in der Browserhistorie. 😜
Gruß pdelvo
Hallo pdelvo
edit:
Ich wollte dich nur auf den Arm nehmen.
Tut mir leid, das kommt nicht mehr vor.
Wie schon gesagt, danke für deinen Hinweis.
Ich habe mein Posting korrigiert.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Ich bin seit 01.07. in einer neuen Firma. Der Vorgänger war schon ein ganzes Stück älter und genau so sieht sein Code auch aus und noch viel schlimmer ... Nicht das er alle Klassen mit einem vorangestelltem T benannte (TMainFrm, ...), nein er produzierte teilweise Code wo einem echt schlecht werden kann:
Application.DoEvents();
processes = Process.GetProcessesByName("EinTollerProzess");
foreach (Process process in processes)
{
process.Kill();
Application.DoEvents();
for (int i = 0; i < 20; i++)
{
Thread.Sleep(5);
Application.DoEvents();
if (process.HasExited)
break;
}
}
Man sollte vielleicht dazu sagen das derjenige zuvor jahrelang mit C++ und Borland gearbeitet hat was dann sicher einiges erklärt jedoch einfach am Thema vorbei geht.
Naja, ich konnte gleich am ersten Tag meinen AG davon überzeugen das man einen solchen Code einfach nicht weiter pflegen DARF. Erschwerend kommt hinzu das er Sachen wie Sourcecodeverwaltung und sowas strikt abgelehnt hat (ja, d.h. für mich jedesmal wenn ein neuer Kunde beliefert werden soll kopiere (!!!) ich eine ähnliche Version und passe diese an ... X( da fang ich echt jedesmal heimlich das weinen an ...) ... Naja bis ich die Anwendung komplett neuschreiben kann muss ich noch die alte Version weiterhin benutzen um neue Kunden zu beliefern. Aber sobald alles geregelt ist lege ich mit der Planung los, und dann mit allem was in die moderne Softwareentwicklung gehört und vorallem wie man es "richtig" in C# und .NET macht 🙂
Gut Schuß
VuuRWerK 😉
Hallo zusammen,
habe das hier gerade in einem alten PHP-Script von mir gefunden:
// Quick and dirty, ich weiß. Trotzdem.
Ich lasse das mal unkommentiert 😄 ...
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hallo zusammen
Irgendwo oben im Code:
ListItem myListItem = ....
Und weiter unten aber in gleichen Scope (Darum wohl der Name):
ListItem myBrandNewListItem = ...
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
ARGH
Hab gerade folgendes in einem älteren Projekt gefunden. Es handelt sich um die Implementierung einer Archivfunktion.
...
int year = .... // DB-Abfrage
if (year < 2005)
{
// Meldung dass die Datensätze archiviert sind
}
else
{
// Datensätze darstellen
}
Ich poste mal was von mir selber. Ist garnicht lange her. Ich habe telefoniert und mich dabei erwischt, als ich sowas geschrieben habe:
return foo ? true : false;
Hätte mich dafür schlagen können^^
Gruß pdelvo
Hallo pdelvo,
okay, das ist natürlich bitter für jemanden, der wahrscheinlich schon mehrfach auf [Tipp] Anfängerfehler == true / == false verlinkt hat 😄 ...
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Ohja. Ich war am quatschen, dann passiert sowas. Habe ich sofort wegoptimiert^^
Also. Kein Telefon vor dem Visual Studio.(Und kein Skype)
Gruß pdelvo
Grad in nem anderen Forum entdeckt:
private void NewFile()
{
if (Directory.Exists(@"C:\Windows\_NOTIZEN_\"))
{
}
else
{
// Specify a "currently active folder"
string activeDir = @"C:\Windows\";
//Create a new subfolder under the current active folder
string newPath = System.IO.Path.Combine(activeDir, "_NOTIZEN_");
// Create the subfolder
System.IO.Directory.CreateDirectory(newPath);
}
if (File.Exists(@"C:\Windows\_NOTIZEN_\Notizen.txt"))
{
}
else
{
if (File.Exists(@"C:\Windows\_NOTIZEN_\"))
{
StreamWriter sw1 = new StreamWriter(@"C:\Windows\_NOTIZEN_\");
StreamWriter sw = new StreamWriter(@"C:\Windows\_NOTIZEN_\Notizen.txt");
sw.Close();
}
}
}
Vorhin im PHP-Code von 'nem Freund gefunden. Variablen sollten echt keinen Alkohol trinken dürfen, am Ende verdoppeln sich noch die Werte. 😄
if($link_url == "") // Wenn $link_url voll ist, ist es ein Link auf eine externe Seite
{
// Datenbank-Insert
}
else
{
// anderer Datenbank-Insert
}
Schade ich muss es wohl derweil ausgebaut haben aber ich habe mit einem Docking-Framework mal was schönes verbrochen (war zwar auch eher aus Gaudi aber funktionierte tatsächlich):
while (toolbox.MdiParent == null)
{
toolbox.MdiParent = this;
}
Hintergrund war der das man aufgrund eines Bugs eine Methode nutzen sollte um den Parent zu setzen (die intern zum Glück nicht das selbe gemacht hat) da es ansonsten erst beim zweiten setzen funktionierte 😉
Habe gerade beim durchstöbern der Path-Klasse in der FCL entdeckt, dass im Konstruktor zwei inhaltlich identische Arrays erzeugt werden: InvalidPathChars
und RealInvalidPathChars
. Ersteres sollte ja bekannt sein, da es public
ist, letzteres wird allerdings nur von GetInvalidPathChars()
verwendet. 😁
Bei uns hab ich gerade folgendes gefunden
if (queryElement.PartOfList)
{
if (((ListMember)queryElement).Parent.RemoveElement((ListMember)queryElement)) { }
}
Folgende interessante Methode einen String zusammen zubauen ist mir (sinngemäß) gerade untergekommen:
8o
string stringArray = new string[15];
stringArray[0] = "Bla";
stringArray[1] = "blubb";
// usw, usw...
int count = 0;
string returnString;
do
{
returnString = returnString + stringArray[count];
count++;
}
while (count <= 14);
return returnString;
Wo ist meine Sauerstoffmaske? 😁
using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}
Hallo,
zwar kein Horror, aber sehr witzig 😃 ...
s. http://blog.opennetcf.com/ncowburn/PermaLink.aspx?guid=257b7f5c-e5ae-4038-9e84-b8457055d7b5 ...
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hallo,
interessante Methode jemanden besseren Stil anzulernen.
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!"
Gerade mal aus der Business-Library unseres Lagacy Sytems kopiert (ist C++)
// !!!!!!!!! BEGIN OF HACK !!!!!!!!!!!!
// 2004-08-11
//
// If shipper == the "XYZ", export to customer "ABC"
// note : this is no real solution, in future we have to change
// the 1:1 relation shipper to customer to a 1:n relation
if( pShipper->GetId() == 101 )
pStatus->ExportToCustomer( 916 );
// !!!!!!!!! END OF HACK !!!!!!!!!!!!
Man beachte den Zeitstempel...
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 gfoidl,
allerdings 😃.
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hallo Flo,
Man beachte den Zeitstempel...
Hehe, da ging wohl ein Hack vergessen.
Das passiert aber immer wieder, denn wenn es funktioniert dann scheren sich die meisten einen Dreck wie schlimm der Code aussieht.
Gruss
Michael
Hallo michlG,
Hehe, da ging wohl ein Hack vergessen.
Das passiert aber immer wieder, denn wenn es funktioniert dann scheren sich die meisten einen Dreck wie schlimm der Code aussieht.
ich glaube nicht, dass er vergessen wurde 😃. Wie heißt es doch so schön: Provisorien halten immer am längsten. Ich kenne das von meinem Arbeitgeber nur zu gut 😃.
Gruß,
Fabian
"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)
Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…
Blog: www.fabiandeitelhoff.de
Hi Michael
Hehe, da ging wohl ein Hack vergessen.
Das passiert aber immer wieder, denn wenn es funktioniert dann scheren sich die meisten einen Dreck wie schlimm der Code aussieht.
Hacks passieren, ich habe diesen Hack aber ca. 5-mal angemahnt X(. Naja, seit einem Jahr ist's auch schon egal, das System ist legacy und ich bin derzeit am kompletten Redesign. 😉
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ß.
Hauptsache es kommt keiner und sagt "Ach, den Codeteil kann man ja per Copy & Paste übernehmen" und schon ist der Mist wieder drin 😄
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
Ach, den Codeteil kann man ja per Copy & Paste übernehmen" und schon ist der Mist wieder drin
Igitt! Das wäre ja eine Form den Code wieder zu benutzen und wiederverwendbarer Code wird kategorisch abgelehnt 😉
Ich würde dazu tendieren das ganze ein bisschen anders forumliert und mit mindestens 70 Zeilen Code neu zu realisieren 8)
70 Zeilen? pfff, Minimalist. Unter 1500 Zeilen Code ist eine Funktion ja noch nicht mal erwachsen! 8o Programmierer such und schlagen will
Hab ich in einem (noch) produktiven Access Programm eines Kunden gefunden:
Die letzte Zeile ist das berühmte Tüpfelchen auf dem i.
If Len(strIn) = 1 Then strOut = "0000000000" & Left(strIn, Len(strIn))
If Len(strIn) = 2 Then strOut = "000000000" & Left(strIn, Len(strIn))
If Len(strIn) = 3 Then strOut = "00000000" & Left(strIn, Len(strIn))
If Len(strIn) = 4 Then strOut = "0000000" & Left(strIn, Len(strIn))
If Len(strIn) = 5 Then strOut = "000000" & Left(strIn, Len(strIn))
If Len(strIn) = 6 Then strOut = "00000" & Left(strIn, Len(strIn))
If Len(strIn) = 7 Then strOut = "0000" & Left(strIn, Len(strIn))
If Len(strIn) = 8 Then strOut = "000" & Left(strIn, Len(strIn))
If Len(strIn) = 9 Then strOut = "00" & Left(strIn, Len(strIn))
If Len(strIn) = 10 Then strOut = "0" & Left(strIn, Len(strIn))
If Len(strIn) = 11 Then strOut = Left(strIn, Len(strIn))
Left(strIn, Len(strIn))
LOL, das nenn ich wenigstens konsequent "weitergedacht" grins.
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Das waren vielleicht ein paar Helden:
If Nz(rs!strCodeBundesland, "") = "" Then
strOut = strOut & "" & strEnde
End If
If Len(rs!strCodeBundesland) = 1 Then
strOut = strOut & rs!strCodeBundesland & " " & strEnde
End If
If Len(rs!strCodeBundesland) = 2 Then
strOut = strOut & rs!strCodeBundesland & " " & strEnde
End If
If Len(rs!strCodeBundesland) = 3 Then
strOut = strOut & rs!strCodeBundesland & strEnde
End If
Hätte das Beste hier beinahe vergessen. Die halten hier nämlich nicht viel von Standard Basis-Klassen:
public class CXObject
public class CXStream : CXObject
public class CXString : CXStream
public class CXTime : CXObject
public class CXFile : CXStream
Die Klassennamen sind leider nicht verwirrend sondern ernst gemeint... 🙁
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 hoffe, dass ich sowas niemals erleben muss, ich könnte mir durchaus vorstellen, dass man mit jeder Codezeile, die man von sowas liest, ne Minute Lebenszeit extra verliert.
Deine Vermutung trifft - leider - voll zu. Ich könnte die Liste unendlich weiterführen (CXSortedList, CXList, ...) oder für Web-Applikationen CXWhiteFrame (= "<div>") 8o
Simples Remoting wurde letztens über Win-Socket erfunden.
Die Firma hier kann eigentlich als Synonym für das Not Invented Here durchgehen.
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 Klassennamen sind leider nicht verwirrend sondern ernst gemeint
Es gibt da auch ein sehr gutes Beispiel in einem OpenSource Shop System, wo konsequenterweise jede Methode / Klasse mit dem Präfix verpackt wird, auch wenn es noch so sinnlos ist, da darin nur die eigentliche Methode aufgerufen wird 😉
Grüße Stephan
PS: Man kann alles ein bisschen übertreiben 😉