in reply to do/redo or for(;;): what's Kosher?

You're right about the TIMTOWTDI:
for (;;) { ... }
while (1) { ... }
do { ... } while 1;
do { ... } until 0;
{ ...; redo; }

Everyone chooses their own favorite idiom.
Perhaps the bare-block-with-redo-solution is the "best" one, but it doesn't look clear. Imagine having a 1000 line loop (there's something wrong with the program design if that's the case, but let's forget that) and seeing only { on the top. In that case (imnsho) it's better to use while (1) { ... } or for (;;) { ... }.
(I admit: I made the same mistake.)

By the way, why would you abandon for (;;) { ... }? A C-style for with only ;; can mean only one thing, and that's why i think it's the "best" solution.

2;0 juerd@ouranos:~$ perl -e'undef christmas' Segmentation fault 2;139 juerd@ouranos:~$

Replies are listed 'Best First'.
Re: Re: do/redo or for(;;): what's Kosher?
by paulbort (Hermit) on Jan 04, 2002 at 23:23 UTC
    I know it's more code, but my favorite method for obvious loops looks like this:
    $forever = 1; while ($forever) { ... }
    ---
    Spring: Forces, Coiled Again!
      That won't be optimized away, but a constant true value (not 0, "0", "" or undef) are.
      This means you can have less code and more efficiency, but still the clarity you like:
      while ('forever'){ ... }


      Which is equivalent to while (1) { ... }, which is optimized to for (;;) { ... }.

      2;0 juerd@ouranos:~$ perl -e'undef christmas' Segmentation fault 2;139 juerd@ouranos:~$