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,
bearophile
I 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









Timon Gehr <timon.gehr gmx.ch> 