assignment: left-to-right or right-to-left evaluation?

Steven Schveighoffer schveiguy at yahoo.com
Mon May 11 08:34:51 PDT 2009


On Mon, 11 May 2009 11:26:36 -0400, Jarrett Billingsley  
<jarrett.billingsley at gmail.com> wrote:

> On Mon, May 11, 2009 at 11:07 AM, Steven Schveighoffer
> <schveiguy at yahoo.com> wrote:
>
>>>>  mydic[x] = mydic[y] = mydic[z] = mydic.length;
>
>> auto tmp = mydic.length;
>> mydic[x] = tmp;
>> mydic[y] = tmp;
>> mydic[z] = tmp;
>>
>> ???
>>
>> That sucks.  We have to remember, there are reasons why we stopped  
>> having to
>> use assembly :)
>
> Funny, I vastly prefer the latter to the former.  Having more than one
> thing happen on one line is very difficult to read after having
> written it, for me.

So I take it if you have many function calls, or chained function calls,  
you split them out into separate lines? :P

fun(gun(123)).xyz() =>

auto tmp1 = gun(123);
auto tmp2 = fun(tmp1);
tmp2.xyz();

???

I look at chained assignment as no different.

Even if order of operations was defined as left to right, I'd still prefer  
using this:

auto tmp = mydic.length;
mydic[x] = mydic[y] = mydic[z] = tmp;

I use assignment chaining all the time in C# Forms when I'm  
disabling/enabling a set of controls.  e.g.:

checkBox1.Enabled = textField1.Enabled = textField2.Enabled =  
textField3.Enabled = true;

It seems pretty straightforward to me...

-Steve



More information about the Digitalmars-d mailing list