Jump to page: 1 2
Thread overview
do-while loops
Dec 28, 2011
bearophile
Dec 28, 2011
Timon Gehr
Dec 28, 2011
Andrej Mitrovic
Dec 28, 2011
Timon Gehr
Dec 28, 2011
bearophile
Dec 28, 2011
Timon Gehr
Dec 28, 2011
Timon Gehr
Dec 28, 2011
Xinok
Dec 28, 2011
Denis Shelomovskij
Dec 28, 2011
Manfred Nowak
Dec 28, 2011
Timon Gehr
December 28, 2011
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
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
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
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
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
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
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
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
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
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.
« First   ‹ Prev
1 2