Live data from Hacker News

Reading code from top to bottom (1999)

iq0.com

11–15 of 15 posts

Re: Reading code from top to bottom (1999)

#11
1. Missing spaces around operators like "==". The first code example has them, but the author proceeds to remove them with no mention as to why.

2. More than one statement on a line:

    int f(int x){
        int v;

        if(b(x)) v=f1(x);
        else v=f2(x);
        return v;
    }
This is so much harder to read than:

    int f(int x){
        int v;
    
        if(b(x)) {
            v=f1(x);
        }else{
            v=f2(x);
        }
        return v;
    }
3. Control flow statements placed arbitrarily far down a line:

    int f(int x){
        if(b(x)) return f1(x);
        return f2(x);
    }
Always keep them at the start of lines:

    int f(int x){
        if(b(x))
            return f1(x);
        return f2(x);
    }
4. Nested ternary operators, yikes:

    int a(int i, int j){
        return i?a(i-1, j?a(i, j-1):1):j+1;
    }

    The language I'm testing is missing the ?: conditional expression, so I had to reword function a using ordinary if statements.

    int a(int i, int j){
        if(i==0) return j+1;
        if(j==0) return a(i-1, 1);
        return a(i-1, a(i, j-1));
    }

    Much better.
It's scary that the author only rewrote this due to a language limitation. The original is painful to read.

Re: Reading code from top to bottom (1999)

#12
My observations, as an opinionated C programmer:

1. Missing const; always const all the things, especially pointers passed to functions. Semantically a "find" would be a read-only operation, to me it's a huge red flag if it's not const-declared.

2. Why NULL-check the array but not the name? I guess it doesn't affect functionality, or perhaps NULL is a valid name. Confusing without more context/commentary.

3. I prefer "++i" rather than "i++" in for loops like this because of reasons, but that's a rather minor point of course.

4. Be daring and use at least C99, move the "int i" to the for-loop's initializing part.

5. It's not obvious that the comparison doesn't need strcmp(), but might be clear from context, would expect comment to clarify that.

I agree with the top-down rewrite and find the revised code better, it's just not ... good enough yet. :)

Edit: list formatting.

Re: Reading code from top to bottom (1999)

#15
post #3

I prefer code in this style too: if something: return something if something else: return something else return default It's not applicable everywhere, but where it is, it seems tidier to me than the alternative: if something: return something elif something else: return something else else: return default Edit: The article basically says the same thing. I just had a hard time parsing all that C at first.

Agree. I always code that way (in non-functional languages).
Post reply on HN