digitalmars.D.learn - do-while loops
- bearophile (18/18) Dec 28 2011 One thing that I often find not handy in the design of do-while loops: t...
- Timon Gehr (2/20) Dec 28 2011 I fully agree, but why does this go to D.learn?
- Andrej Mitrovic (10/10) Dec 28 2011 A very small cheat:
- Timon Gehr (2/12) Dec 28 2011 This won't work. The 'if' condition is always false.
- bearophile (4/5) Dec 28 2011 Because I think there's no hope to see this situation changed :-)
- Timon Gehr (4/9) Dec 28 2011 Why? The only D code that would get broken would be code that uses a
- =?ISO-8859-1?Q?Alex_R=F8nne_Petersen?= (3/15) Dec 28 2011 That's still a bit of a risk to take for such a small change, IMHO.
- Timon Gehr (12/28) Dec 28 2011 Well, do loops are the least frequently used looping constructs. Also,
- Xinok (9/15) Dec 28 2011 I would just rewrite it like so:
- Denis Shelomovskij (4/22) Dec 28 2011 +1
- Manfred Nowak (8/14) Dec 28 2011 Do you mean, that the similar while-loop should also be okay?
- Timon Gehr (9/23) Dec 28 2011 No, it is not any more valid than the following code, even if condition
One thing that I often find not handy in the design of do-while loops: the scope of their body ends before the "while": void main() { do { int x = 5; } while (x != 5); // Error: undefined identifier x } So I can't define inside them variables that I test in the while(). This keeps the scope clean, but it's not nice looking: void main() { { int x; do { x = 5; } while (x != 5); } } Bye, bearophile
Dec 28 2011
On 12/28/2011 02:29 PM, bearophile wrote:One thing that I often find not handy in the design of do-while loops: the scope of their body ends before the "while": void main() { do { int x = 5; } while (x != 5); // Error: undefined identifier x } So I can't define inside them variables that I test in the while(). This keeps the scope clean, but it's not nice looking: void main() { { int x; do { x = 5; } while (x != 5); } } Bye, bearophileI fully agree, but why does this go to D.learn?
Dec 28 2011
A very small cheat: void main() { if (int x = 0) do { x = 5; } while (x != 5); } Only works for this simple case though. Put your post in d.general, I totally agree with it as well.
Dec 28 2011
On 12/28/2011 04:01 PM, Andrej Mitrovic wrote:A very small cheat: void main() { if (int x = 0) do { x = 5; } while (x != 5); } Only works for this simple case though. Put your post in d.general, I totally agree with it as well.This won't work. The 'if' condition is always false.
Dec 28 2011
Timon Gehr:I fully agree, but why does this go to D.learn?Because I think there's no hope to see this situation changed :-) Bye, bearophile
Dec 28 2011
On 12/28/2011 06:42 PM, bearophile wrote:Timon Gehr:Why? The only D code that would get broken would be code that uses a global variable in the loop condition of the same name as a do loop local variable.I fully agree, but why does this go to D.learn?Because I think there's no hope to see this situation changed :-) Bye, bearophile
Dec 28 2011
On 28-12-2011 18:50, Timon Gehr wrote:On 12/28/2011 06:42 PM, bearophile wrote:That's still a bit of a risk to take for such a small change, IMHO. - AlexTimon Gehr:Why? The only D code that would get broken would be code that uses a global variable in the loop condition of the same name as a do loop local variable.I fully agree, but why does this go to D.learn?Because I think there's no hope to see this situation changed :-) Bye, bearophile
Dec 28 2011
On 12/28/2011 09:32 PM, Alex Rønne Petersen wrote:On 28-12-2011 18:50, Timon Gehr wrote:Well, do loops are the least frequently used looping constructs. Also, if you actually have code like the following import foo; // defines global symbol 'x' void main(){ do { int x; // ... }while(x<2); } It is likely that it is actually buggy because the programmer assumed lookup would work differently.On 12/28/2011 06:42 PM, bearophile wrote:That's still a bit of a risk to take for such a small change, IMHO. - AlexTimon Gehr:Why? The only D code that would get broken would be code that uses a global variable in the loop condition of the same name as a do loop local variable.I fully agree, but why does this go to D.learn?Because I think there's no hope to see this situation changed :-) Bye, bearophile
Dec 28 2011
On 12/28/2011 8:29 AM, bearophile wrote:One thing that I often find not handy in the design of do-while loops: the scope of their body ends before the "while": void main() { do { int x = 5; } while (x != 5); // Error: undefined identifier x }I would just rewrite it like so: void main(){ while(true){ int x = 5; if(x != 5) continue; break; } }
Dec 28 2011
28.12.2011 16:29, bearophile ïèøåò:One thing that I often find not handy in the design of do-while loops: the scope of their body ends before the "while": void main() { do { int x = 5; } while (x != 5); // Error: undefined identifier x } So I can't define inside them variables that I test in the while(). This keeps the scope clean, but it's not nice looking: void main() { { int x; do { x = 5; } while (x != 5); } } Bye, bearophile+1 I faced it a few days ago too. An enhancement request should be filled. Even if it will be resolved as WONTFIX, at least we will know a reason.
Dec 28 2011
bearophile wrote:void main() { do { int x = 5; } while (x != 5); // Error: undefined identifier x }Do you mean, that the similar while-loop should also be okay? | void main() { | while (x != 5) /* uses `x' out of _following_ scope */ { | int x = 5; | }; | } -manfred
Dec 28 2011
On 12/28/2011 10:45 PM, Manfred Nowak wrote:bearophile wrote:No, it is not any more valid than the following code, even if condition and body are scoped together: void main() { bool _ = x != 5; int x = 5; } Related: https://github.com/D-Programming-Language/dmd/pull/342#issuecomment-3232150void main() { do { int x = 5; } while (x != 5); // Error: undefined identifier x }Do you mean, that the similar while-loop should also be okay? | void main() { | while (x != 5) /* uses `x' out of _following_ scope */ { | int x = 5; | }; | } -manfred
Dec 28 2011