|
See how easy it is to spot errors when you use table-lookup code!
|
|
|
|
|
Unfortunately, such code is still being written.
I came across something like that last year (written just weeks earlier).
This one is actually pretty clean compared to that one.
It had about 10 types and each type could results in 3 actions, so that was an 10x3 if else branch
Why don't these programmers ever stop to think "just because I can does it mean I should?"
Or maybe they do, but their lack of knowledge prevents them from coming up with anything better and their lack of knowledge about their lack of knowledge prevents them from asking someone else for help...
Ignorance is bliss and crappy code I guess.
|
|
|
|
|
Maybe a bit masochistic, but I'm waiting for the next one.
|
|
|
|
|
This code just leaves me speechless. It's wrong for so many reasons, and shouldn't actually even exist.
public static string PadStrg(string value, int length, char padValue, pad Pad)
{
if (value == null)
value = string.Empty;
StringBuilder sb = new StringBuilder();
string returnString = string.Empty;
if (Pad == pad.Right)
{
sb.Append(value.Trim());
sb.Append(padValue, length);
returnString = sb.ToString(0, length);
}
else
{
sb.Append(padValue, length);
sb.Append(value.Trim());
returnString = sb.ToString(sb.Length - length, length);
}
return returnString;
}
Marc
|
|
|
|
|
We'll pray for you.
|
|
|
|
|
Well, it's not like String.PadLeft[^] and String.PadRight[^] have been part of .NET since v1, is it?
And look how many characters you save by using Strg instead of String ! The code is smaller, and therefore it must be more efficient.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
PadLeft and PadRight produce different result: if the input value is longer than the desired length, they won't cut it down. That's a great advantage of this gem!
|
|
|
|
|
Are you the one that developed this abomination? I threw up a little while reading this method
|
|
|
|
|
C'mon, I use to work with excellent teams which are prone to produce gems of that splendid quality!
|
|
|
|
|
My condolences
|
|
|
|
|
Just looking at it is giving me a headache.
if (Object.DividedByZero == true) { Universe.Implode(); }
Meus ratio ex fortis machina. Simplicitatis de formae ac munus. -Foothill, 2016
|
|
|
|
|
Surely this should have been an extension method
|
|
|
|
|
Actually, I learned something: hadn't noticed the .Append "repeater" before.
Maybe he's really an idiot savant.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Search for other gems of this misunderstood genius.
This code shouldnt get published.
Press F1 for help or google it.
Greetings from Germany
|
|
|
|
|
I assume this is from a older codebase that was blindly converted to .NET, I can't imagine anyone the knows they should use StringBuilder but not that Padding strings is built into to .NET.
|
|
|
|
|
cjb110 wrote: I can't imagine anyone the knows they should use StringBuilder but not that Padding strings is built into to .NET.
Sadly, this was code written in the last couple years, outsourced to some Indian devs.
Marc
|
|
|
|
|
...because his code (yes, I know it's a "he") and style reminds me of stuff I've seen in Javascript and other script languages.
public void Foo()
{
var SomeList = new ArrayList();
SomeList = getSomeList();
if (SomeList.Count != 0)
{
foreach (string Item in SomeList)
{
var S = Item.Split(',');
var S0 = s[0];
var S1 = s[1];
var S2 = s[2];
var S3 = s[3];
...
}
}
}
private static ArrayList getSomeList()
{
var List = new ArrayList();
...
List.Add(N1 + "," + N2 + "," + N3 + "," + N3);
...
return List;
}
Variable names have for the most part been changed to protect the innocent.
Things that got me laughing, cringing, and crying:
- Useless initialization of SomeList
- Well, if the count is 0, the
foreach won't execute - Obviously never heard of
out variables, or even returning a struct/class with the parsed data. Instead, he creates a concatenated string, then parses it back out! And not exactly internationalized, the chaos that would occur if one or more of the numbers was 1234,56 - Why a static method? It's referenced once, in the above call.
And this is just the beginning!
(I do believe this code was written in the .NET 2.0 days before generics -- I have other clues to that -- but that's no excuse.)
Marc
|
|
|
|
|
Marc Clifton wrote: the .NET 2.0 days before generics
Did you mean the .NET 1.0 days? Generics were introduced with 2.0.
Marc Clifton wrote: Why a static method?
Why not a static method? If it's not referencing any instance members, there are very few reasons to make it an instance method.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Richard Deeming wrote: Generics were introduced with 2.0.
Ah, my C# history is in error. Must self-destruct!
Richard Deeming wrote: If it's not referencing any instance members, there are very few reasons to make it an instance method.
It's just weird. Why then require instantiating the class to call the public method, particularly if all it does is internally call private static methods?
Marc
|
|
|
|
|
Exactly. Your complaint should have been that Foo *wasn't* static, not that getSomeList was.
|
|
|
|
|
Marc Clifton wrote: Javascript and other script languages
and Java too.
... such stuff as dreams are made on
|
|
|
|
|
I never saw such JS code... If I had I would send the author home... for good...
Skipper: We'll fix it.
Alex: Fix it? How you gonna fix this?
Skipper: Grit, spit and a whole lotta duct tape.
|
|
|
|
|
Considering the use of var it must be at least .Net 3.5, unless of course that was part of protecting the innocent.
|
|
|
|
|
Jörgen Andersson wrote: Considering the use of var it must be at least .Net 3.5, unless of course that was part of protecting the innocent.
Ah, good point. The vars were there in the original. It's really weird, it's as if the code was being compiled with C# (some version) but against an ancient version of .NET, because there's even reference elsewhere to StringDictionary which is pretty obsolete since generics.
Marc
|
|
|
|
|
Or it is a person who seldom worked with .NET and had to bring up a solution for yesterday. I have the same issue with old code written in VB6 by "programmers" who at the time used QBasic (yes, first instance of our software worked under DOS).
Besides, today there is .NET 4.6something, I only worked with 3.5 so I would probably write code which does not use any new functionality due to lack of experience / knowledge of them.
DURA LEX, SED LEX
GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X
If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver
When I was six, there were no ones and zeroes - only zeroes. And not all of them worked. -- Ravi Bhavnani
|
|
|
|