Re: on goto
On 26 Apr., 10:10, "Alf P. Steinbach" wrote:
Here's my more direct take on it.
It's not perfect, but hey!
[...]
int main()
{
typedef Array< int > IntArray;
typedef Array< IntArray > IntMatrix;
[...]
int const searchFor = 12;
int i;
int j;
try
{
for( i = 0; i < arrayOfInts.length || fail(); =
++i )
{
for( j = 0; j < arrayOfInts[i].length; =
++j )
{
if( arrayOfInts[i][j] == searchFor=
)
{
throw Success();
}
}
}
assert( false );
}
catch( Success )
{
sys::out::println(
S() << "Found " << searchFor << " at " << i <<=
", " << j
);
}
catch( Failure )
{
sys::out::println( S() << searchFor << " not in the ar=
ray" );
}
}
I think, one should always use this very clear Success/Failure combo inst=
ead of
the extremely evil and error prone "goto" or boolean variable! ;-)
I realize that this was intended to be a joke. But let me comment on
it anyways. I see no reason for a goto here. Just wrap your "find
algorithm" inside its own function and use a return statement instead
of "throw Success()".
return is another "goto in disguise" but I'm fine with it. I even used
goto in one of my C programs, so, I'm not totally opposed to it. But
if I can manage to avoid it without hurting readability, I'll just do
that. I don't think I ever used goto in a C++ program. At least I
can't remember. This is probably due to the possibility of "RAII".
Cheers,
SG