You'll be glad to know! [modified]
-
Yesterday I wrote no less than 2 gotos in my C# code! [Edit2] This guy[^] found a satisfying refactoring! One which doesn't tax my (limited brain) memory with nested block, additional variable, additional test, increased cyclomatic complexity! (In fact the cyclomatic complexity is reduced by 1, I think) Well done! :thumbsup: :cool: :-D [EDIT] For your information the real code is below. So far no one has come up with a non goto version which can beat the goto version on any of those 4 criteria: - number of line of code (less) - number of if (less) - number of nested block (less) - number of variables (less) -- code --
for (int i = max; i >= min; i--)
{
var v1 = new Vector2D(points[i > 0 ? i - 1 : points.Count - 1], points[i]);
var v2 = new Vector2D(points[i], points[i < points.Count - 1 ? i + 1 : 0]);
if (v1.SquareNorm <= MINL || v2.SquareNorm <= MINL)
goto RemovePoint;
v1 = v1.Normalize(); // divide by zero if square norm is 0 (test above)
v2 = v2.Normalize();
var z = v1 ^ v2;
if (Math.Abs(z) <= minsin && v1 * v2 < 0)
goto RemovePoint;
continue;
RemovePoint: ;
points.RemoveAt(i);
if (points.Count < 3)
return null;
}A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
modified on Friday, September 10, 2010 10:53 AM
-
Yesterday I wrote no less than 2 gotos in my C# code! [Edit2] This guy[^] found a satisfying refactoring! One which doesn't tax my (limited brain) memory with nested block, additional variable, additional test, increased cyclomatic complexity! (In fact the cyclomatic complexity is reduced by 1, I think) Well done! :thumbsup: :cool: :-D [EDIT] For your information the real code is below. So far no one has come up with a non goto version which can beat the goto version on any of those 4 criteria: - number of line of code (less) - number of if (less) - number of nested block (less) - number of variables (less) -- code --
for (int i = max; i >= min; i--)
{
var v1 = new Vector2D(points[i > 0 ? i - 1 : points.Count - 1], points[i]);
var v2 = new Vector2D(points[i], points[i < points.Count - 1 ? i + 1 : 0]);
if (v1.SquareNorm <= MINL || v2.SquareNorm <= MINL)
goto RemovePoint;
v1 = v1.Normalize(); // divide by zero if square norm is 0 (test above)
v2 = v2.Normalize();
var z = v1 ^ v2;
if (Math.Abs(z) <= minsin && v1 * v2 < 0)
goto RemovePoint;
continue;
RemovePoint: ;
points.RemoveAt(i);
if (points.Count < 3)
return null;
}A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
modified on Friday, September 10, 2010 10:53 AM
Super Lloyd wrote:
no less than 2 gotos in my C# code
If it was no less than 2, then it may have been more...
Panic, Chaos, Destruction. My work here is done. or "Drink. Get drunk. Fall over." - P O'H
-
Yesterday I wrote no less than 2 gotos in my C# code! [Edit2] This guy[^] found a satisfying refactoring! One which doesn't tax my (limited brain) memory with nested block, additional variable, additional test, increased cyclomatic complexity! (In fact the cyclomatic complexity is reduced by 1, I think) Well done! :thumbsup: :cool: :-D [EDIT] For your information the real code is below. So far no one has come up with a non goto version which can beat the goto version on any of those 4 criteria: - number of line of code (less) - number of if (less) - number of nested block (less) - number of variables (less) -- code --
for (int i = max; i >= min; i--)
{
var v1 = new Vector2D(points[i > 0 ? i - 1 : points.Count - 1], points[i]);
var v2 = new Vector2D(points[i], points[i < points.Count - 1 ? i + 1 : 0]);
if (v1.SquareNorm <= MINL || v2.SquareNorm <= MINL)
goto RemovePoint;
v1 = v1.Normalize(); // divide by zero if square norm is 0 (test above)
v2 = v2.Normalize();
var z = v1 ^ v2;
if (Math.Abs(z) <= minsin && v1 * v2 < 0)
goto RemovePoint;
continue;
RemovePoint: ;
points.RemoveAt(i);
if (points.Count < 3)
return null;
}A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
modified on Friday, September 10, 2010 10:53 AM
-
Super Lloyd wrote:
no less than 2 gotos in my C# code
If it was no less than 2, then it may have been more...
Panic, Chaos, Destruction. My work here is done. or "Drink. Get drunk. Fall over." - P O'H
maybe... :rolleyes:
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
-
maybe... :rolleyes:
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
I had to 'have words' with one fo my minions today for using them there things. We're working in C# ffs, there was no need at all.
Panic, Chaos, Destruction. My work here is done. or "Drink. Get drunk. Fall over." - P O'H
-
I'm (not) sorry to say that I handle such condition with try {} finally {} so, no, no error handling! Muhahaha.... ;P
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
-
I'm (not) sorry to say that I handle such condition with try {} finally {} so, no, no error handling! Muhahaha.... ;P
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
-
I had to 'have words' with one fo my minions today for using them there things. We're working in C# ffs, there was no need at all.
Panic, Chaos, Destruction. My work here is done. or "Drink. Get drunk. Fall over." - P O'H
I thought about it and... despite my initial inflamatory intention I'm thinking we could both gain by showing you what I did, who knows one of 2 thing might even happen!! 1. maybe you'll think this is a good goto! 2. maybe you'll give me good work around so, here you go (veil your eyes, code in the lounge) please remove the goto in the nice fashion or hold your peace forever!
for(...)
{
avar = calculation()
if(avar == someValue)
goto doStuff;
avar2 = someOtherCalculation();
if(avar2 == someValue2)
goto doStuff;
continue;
doStuff:;
localVar.UpdateNicely();
}A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
-
Ok, maybe I should say what I did, so maybe an anti-goto purist can give me tips on how to write goto-less nice code in such circumstances... (or become less anti goto) so here we go, that's what I wrote (veil your eyes, code in the lounge!)
for(...)
{
avar = calculation()
if(avar == someValue)
goto doStuff;
avar2 = someOtherCalculation();
if(avar2 == someValue2)
goto doStuff;
continue;
doStuff:;
localVar.UpdateNicely();
}A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
-
Ok, maybe I should say what I did, so maybe an anti-goto purist can give me tips on how to write goto-less nice code in such circumstances... (or become less anti goto) so here we go, that's what I wrote (veil your eyes, code in the lounge!)
for(...)
{
avar = calculation()
if(avar == someValue)
goto doStuff;
avar2 = someOtherCalculation();
if(avar2 == someValue2)
goto doStuff;
continue;
doStuff:;
localVar.UpdateNicely();
}A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
-
Delete this post before everybody sees and you are shamed!
-
Ok, maybe I should say what I did, so maybe an anti-goto purist can give me tips on how to write goto-less nice code in such circumstances... (or become less anti goto) so here we go, that's what I wrote (veil your eyes, code in the lounge!)
for(...)
{
avar = calculation()
if(avar == someValue)
goto doStuff;
avar2 = someOtherCalculation();
if(avar2 == someValue2)
goto doStuff;
continue;
doStuff:;
localVar.UpdateNicely();
}A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
You really should read part 2 of your Language Reference Manual, in particular the chapters on logical operators and short-circuitry.
for (...) {
if (calculation()==someValue || someOtherCalculation()==someValue2) localVar.UpdateNicely();
}Readability is the key concern here. :)
Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, and improve readability.
-
Delete this post before everybody sees and you are shamed!
-
You really should read part 2 of your Language Reference Manual, in particular the chapters on logical operators and short-circuitry.
for (...) {
if (calculation()==someValue || someOtherCalculation()==someValue2) localVar.UpdateNicely();
}Readability is the key concern here. :)
Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, and improve readability.
-
Ok, maybe I should say what I did, so maybe an anti-goto purist can give me tips on how to write goto-less nice code in such circumstances... (or become less anti goto) so here we go, that's what I wrote (veil your eyes, code in the lounge!)
for(...)
{
avar = calculation()
if(avar == someValue)
goto doStuff;
avar2 = someOtherCalculation();
if(avar2 == someValue2)
goto doStuff;
continue;
doStuff:;
localVar.UpdateNicely();
}A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
How about
for(...)
{
avar = calculation()
if(avar != someValue)
{
avar2 = someOtherCalculation();
if(avar2 != someValue2)
continue;
}
localVar.UpdateNicely();
}The point is basically that
if (something)
goto somewhere
more_stuff;
somewhere:is equivalent to
if (!something)
more_stuff;and you've just got two of them nested. Cheers from one who thinks coding standards are generally a good thing but do not represent ultimate authority. Peter
Software rusts. Simon Stephenson, ca 1994.
-
You really should read part 2 of your Language Reference Manual, in particular the chapters on logical operators and short-circuitry.
for (...) {
if (calculation()==someValue || someOtherCalculation()==someValue2) localVar.UpdateNicely();
}Readability is the key concern here. :)
Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, and improve readability.
well, I wanted to use some simple pseudo code, but the statement "var1 = calculation()" is really a multi inner variable multiline statement with a more complex statement. I guess I can replace it with a private static variable with heaps of ref variable just or the sake of writing such statement as you sugest, but I won't!
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
-
I thought about it and... despite my initial inflamatory intention I'm thinking we could both gain by showing you what I did, who knows one of 2 thing might even happen!! 1. maybe you'll think this is a good goto! 2. maybe you'll give me good work around so, here you go (veil your eyes, code in the lounge) please remove the goto in the nice fashion or hold your peace forever!
for(...)
{
avar = calculation()
if(avar == someValue)
goto doStuff;
avar2 = someOtherCalculation();
if(avar2 == someValue2)
goto doStuff;
continue;
doStuff:;
localVar.UpdateNicely();
}A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
No excuse!
for(...)
{
if(calc() == v || calc2() == v2)
{
localVar.UpdateNicely();
}
} -
You really should read part 2 of your Language Reference Manual, in particular the chapters on logical operators and short-circuitry.
for (...) {
if (calculation()==someValue || someOtherCalculation()==someValue2) localVar.UpdateNicely();
}Readability is the key concern here. :)
Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, and improve readability.
Dang, you beat me.
-
How about
for(...)
{
avar = calculation()
if(avar != someValue)
{
avar2 = someOtherCalculation();
if(avar2 != someValue2)
continue;
}
localVar.UpdateNicely();
}The point is basically that
if (something)
goto somewhere
more_stuff;
somewhere:is equivalent to
if (!something)
more_stuff;and you've just got two of them nested. Cheers from one who thinks coding standards are generally a good thing but do not represent ultimate authority. Peter
Software rusts. Simon Stephenson, ca 1994.
Indeed that will do! :thumbsup: :) However.... I do prefer goto to multiple nested statement! ;P
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
-
Dang, you beat me.
the advantage of a keyboard with a very short cable. :)
Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, and improve readability.