Jacob Carlborg wrote:
On 2011-08-07 03:19, bearophile wrote:
I have discussed about this topic once in past, but in the meantime I have seen this is a quite common problem, so I think it doesn't harm to touch this topic again.

This is a direct D translation of the original C or C++ code:


// version #1
double foo;
if (abs(e.x - v.x)>  double.min)
     foo = (v.y - e.y) / (v.x - e.x);
else
     foo = double.max;

If D's statements were expressions instead, this could work:

const foo = if (abs(e.x - v.x)>  double.min)
    (v.y - e.y) / (v.x - e.x);
else
    double.max;


I find that much more difficult to read.
Especially consider

const foo  =  (a > b) ? bar() : baz();

compared to

const foo = if (a > b)
                bar();
            else
                baz();

You have to read quite a lot of code before you get any visual cue that the return value of baz() is used. IMHO: to understand code, I think you really need to know if you're looking at an expression or a statement, so making 'if' do both jobs reduces code clarity. (Would be OK in a language where it was _always_ an expression).

Reply via email to