Thread overview | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
December 28, 2011 do-while loops | ||||
---|---|---|---|---|
| ||||
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 |
December 28, 2011 Re: do-while loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | 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?
|
December 28, 2011 Re: do-while loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timon Gehr | 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. |
December 28, 2011 Re: do-while loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrej Mitrovic | 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.
|
December 28, 2011 Re: do-while loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | 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;
}
}
|
December 28, 2011 Re: do-while loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timon Gehr | 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
|
December 28, 2011 Re: do-while loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On 12/28/2011 06:42 PM, bearophile wrote:
> 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
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.
|
December 28, 2011 Re: do-while loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | 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.
|
December 28, 2011 Re: do-while loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timon Gehr | On 28-12-2011 18:50, Timon Gehr wrote:
> On 12/28/2011 06:42 PM, bearophile wrote:
>> 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
>
> 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.
That's still a bit of a risk to take for such a small change, IMHO.
- Alex
|
December 28, 2011 Re: do-while loops | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alex Rønne Petersen | On 12/28/2011 09:32 PM, Alex Rønne Petersen wrote:
> On 28-12-2011 18:50, Timon Gehr wrote:
>> On 12/28/2011 06:42 PM, bearophile wrote:
>>> 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
>>
>> 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.
>
> That's still a bit of a risk to take for such a small change, IMHO.
>
> - Alex
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.
|
Copyright © 1999-2021 by the D Language Foundation