I miss loop

  • Thread starter Thread starter cj
  • Start date Start date
C

cj

When I'm inside a do while loop sometimes it's necessary to jump out of
the loop using exit do. I'm also used to being able to jump back and
begin the loop again. Not sure which language my memories are of but I
think I just said loop somewhere inside the loop and it immediately
jumped back to the start of the loop and began again. I can't seem to
do that in .net. I this functionality available?
 
cj said:
When I'm inside a do while loop sometimes it's necessary to jump out of
the loop using exit do. I'm also used to being able to jump back and
begin the loop again. Not sure which language my memories are of but I
think I just said loop somewhere inside the loop and it immediately jumped
back to the start of the loop and began again. I can't seem to do that in
.net. I this functionality available?

I think in VB.Net 2005, you have the Continue statement, but I'm not sure.
In C#, it's continue (if my memory serves correctly).

HTH,
Mythran
 
Unfortunately I'm using VB.Net 2003 right now and continue doesn't
appear to do that in 2003. I believe continue does have that
functionality in some language.
 
cj said:
Unfortunately I'm using VB.Net 2003 right now and continue doesn't appear
to do that in 2003. I believe continue does have that functionality in
some language.

You can still mimick the behavior of 'continue' using a named label and
'GoTo'...
 
Whowa! Your sure to get blasted for that idea. I hope you aren't using
your real name. :) I just might do that though.
 
cj said:
When I'm inside a do while loop sometimes it's necessary to jump out
of the loop using exit do. I'm also used to being able to jump back
and begin the loop again. Not sure which language my memories are of
but I think I just said loop somewhere inside the loop and it
immediately jumped back to the start of the loop and began again. I
can't seem to do that in .net. I this functionality available?

The meaning of "continue" is to start the *next* iteration immediately and
bypass any further code in the loop body. If you want to continue the
current operation then you'd either have an inner loop or use a goto. If you
want to completely restart the loop then you'd be best enclosing it in an
outer loop. You mustn't use the goto idea for that one. Jumping out of the
loop to before the loop - that should get you those frowns. ;o)
 
I understand the functionality of continue. I also understand it
doesn't work in VB.Net 2003, right? It does in 2005, right?

I understand why goto is not generally a good thing but just because a
command has been frequently misused in the past doesn't make it bad. I
admire Herfried for suggesting goto. It seems like a perfect use.
Still I'm having a hard time using it because other say it's wrong.
It's a real conundrum. There has to be a way that socially acceptable
and personally feels right.

An outer loop is what I have started with because goto has been out of
my vocabulary since 87. Still I just don't like seeing one loop
inserted inside another just for this functionality. It looks funny and
just seems wrong. I'll come up with a better way. Something in the
nature subroutines and flags etc. I'll get something that feels better
when I get back to work tomorrow.
 
VB 6 doesn't have it either. What you see in VB 6 program is:

do
if somecondition then
...
...
end if
loop

In VB 2005 this would be

do
if not somecondition then continue
...
...
loop

It's awkward but it works. Also, it's interesting to note that the VB 2005
continue doesn't actually jump back to the start of the loop. It actually
jumps to the end of the loop and lets the loop control jump back. Watch it
in the debugger.

Mike Ober.
 
cj,

I don't agree with you and there is in my opinion enough written in this
newsgroup about that.

Can't you not use a Select Case. Probably makes that your program again much
readable then.

Cor
 
cj said:
When I'm inside a do while loop sometimes it's necessary to jump out of
the loop using exit do. I'm also used to being able to jump back and
begin the loop again. Not sure which language my memories are of but I
think I just said loop somewhere inside the loop and it immediately
jumped back to the start of the loop and began again. I can't seem to
do that in .net. I this functionality available?

Did you use Clipper(xBase) by any chance? There a loop contruction there
like you describe it. I'm missing it too in VB. When porting some
routines over from xBase++ I've run into this problem and had to rethink
the logic.. too bad :(
 
Sorry to hear you disagree. Anyway, it's just an opinion. Everyone has
one.

No, the select case would not work in this situation at all.
 
Yes, DOS based Clipper for over 7 years. I think that loop construction
is in several other languages too. Someone here suggested it's in C as
well. And it sounds like it's in VB .Net 2005.

Glad to hear from someone else who's heard of Clipper.
 
I could use lots of "if somecondition" nested together. But, IMHO by
the time you get to checking conditions in 5,6 or 7 places in the loop
it makes for a very funny looking program with all the nested ifs.
Things begin to get indented off the right side of the screen.

Basically I'm starting the loop and if things go correctly I execute all
code in it. But at say 6 places in the loop I have to check how things
are going. If they are not going well I want to forget about processing
the remainder of work in the loop and try the next iteration.
 
How about making the loop in its own procedure that can take the appropriate
arguments you'll need to use to determine if the loop "is going well and
should continue"?

You can still exit from the loop (or from the sub if the loop is in one) if
you need to and you'd be able to re-call the loop/procedure and pass it what
it needs to begin again.
 
cj said:
I understand the functionality of continue. I also understand it
doesn't work in VB.Net 2003, right? It does in 2005, right?

I don't know about 2005. ;-)
I understand why goto is not generally a good thing but just because a
command has been frequently misused in the past doesn't make it bad.
I admire Herfried for suggesting goto. It seems like a perfect use.

I've never thought goto was bad. I think that bad use of it is bad. :-D
Still I'm having a hard time using it because other say it's wrong.
It's a real conundrum. There has to be a way that socially acceptable
and personally feels right.

You're the only one that can change your personal perspective on it.
Socially it really depends on who's opinion you're giving value to. I wonder
what would happen if you change your personal perspective to let you use
goto when the situation warrants it, and give it more priority than "social"
opinion. :-))
An outer loop is what I have started with because goto has been out of
my vocabulary since 87. Still I just don't like seeing one loop
inserted inside another just for this functionality. It looks funny
and just seems wrong.

I often use that method but yep, it looks clumsy, clumsy and makes the code
cry out for some decent syntax for this structure. I can't remember where it
was but one language I came across had "break" (or exit loop) and "continue"
with an index. The index was the level of the loop that the break or
continue was applied to. Very handy.

To make the goto easy to use for a reader you have to make it stand out in
the code, else the reader might be hunting all over for it and that can look
clumsy too. Do you have the label in column one or indent it (and hence bury
it, to a degree) in the code which it labels? :-/ A choice of name that says
where to go/look, like "goto bottom_of_loop" helps.
I'll come up with a better way. Something in
the nature subroutines and flags etc.

Aye, it sounds as if the loop body contains enough that a subroutine would
be appropriate anyway, perhaps.
 
cj said:
Whowa! Your sure to get blasted for that idea. I hope you aren't using
your real name. :) I just might do that though.

lol Herfried is a very popular poster here :) As well as an MVP...he'll be
blasted for being both of those for sure <ducks>

Naw, Herfried is a good poster and if he gets blasted...

Mythran
 
An outer loop is what I have started with because goto has been out of my
vocabulary since 87.

Never do batch files eh? Like you said, it's not a bad command, just a
misused command. And if you want the functionality of "Continue" without
using the IF's, then Goto is the perfect command for what you are trying to
accomplish.

Mythran
 
Basically I'm starting the loop and if things go correctly I execute
all code in it. But at say 6 places in the loop I have to check how
things are going. If they are not going well I want to forget about
processing the remainder of work in the loop and try the next
iteration.

You could always try structured programming:


Do While True
carryOn = True

if carryOn Then
DoSomeProcessing()
carryOn = Not ConditionMet()

end if

if carryOn Then
DoSomeMoreProcessing()
If Not AnotherCondition() Then
carryOn = False
End If

end if

if carryOn Then
DoLastBitOfWork
If FinalCondition > criterionDecided Then
Exit Do
End If
End If

Loop



Hope that helps


Tim F
 
cj,

You can do it without a continue, a goto or whatever. I have once made a
sample for that when Marina told I could not. It is unreadable, however.
Therefore I do not show it here.

It was almost the same as yours, although she had made an impossible
chalenge as sample.

Cor
 
Back
Top