On 20.09.2017 23:13, nkm1 wrote:

Example of a good use:

void floodFill(dchar[][] data,dchar c,int i,int j) {
    void dfs(int a, int b) {
Example of a good use:

void floodFill(dchar[][] data,dchar c,int i,int j) {
    void dfs(int a, int b) {
        if (a<0 || a >= data.length) return;
        if (b<0 || b >= data[a].length) return;
        if (data[a][b] == c) return;
        data[a][b] = c;
        foreach(i; 0 .. 4){
            dfs(a + (i==0) - (i==1),
                b + (i==2) - (i==3));
        }
    }
    dfs(i, j);
}

I don't agree it's a good use.

Well, you can trust me that it is. ;)

Actually, that seems quite obfuscated to me.

It's actually straightforward. This C code is obfuscated:

#define C ,
#define S(X) "Fizz"X"Buzz"
int main(){
  char j[]="00",*k=j+1,*g[]={k,S(C),S()};
  while(':'-*j)
    ++*k>'9'&&++*j&&(1<:*g=j:>='0'),
    puts(g[!((*j+*k)%3)|2*(3==*k%5)]);
  return 0;
}

(And yet, you are probably able to guess what it does.)

Consider:

(I had considered that.)

foreach (point; [[1, 0], [-1, 0], [0, 1], [0, -1]]) {
    dfs(a + point[0], b + point[1]);
}

void floodFill(dchar[][] data,dchar c,int i,int j) @nogc {

I.e., I'd possibly call this a bad use of array literals. ;)
(The fix is to initialize a static array of static arrays.)

Also, it's not really a point, rather, it's a delta.

Finds some random 10 programmers and ask them what's easier to understand...

Personally, I think it is a tie as both are obvious.

Also, in my experience (in C and C++) it is extremely rare for programmers to 
use booleans in arithmetic. So even if in some situation you would have to 
replace this thing with more verbose (i == 0 ? 1 : 0), it's no big deal.

I didn't say it was.

OTOH, booleans being numbers is a source of some bugs (just like other cases of weak typing). Not a ton of bugs, but the utility of implicit conversion to numbers is so unnoticeable that I'm sure it's just not worth it.

So am I, but I wasn't commenting on trade-offs, only the view that there are no good uses.

Reply via email to