>> (5) Adopt the convention that any function that is not as trivial as "int 
>> x() { return m_x; }" moves out of the class declaration.
> 
> How about we simplify this slightly to:
> 
> (5) Adopt the convention that any function that is nontrivial should be moved 
> out of the class declaration.
> 
> We can give an example as to what might constitute trivial if we wish (e.g. 
> is a one liner), but I think leaving a little wiggle room to allow developers 
> to apply common sense would be a good thing.  While moving all complex 
> functions out of class definitions sounds good, for some small classes being 
> able to leave some very simple functions in the class declaration might not 
> hurt, and might make the code easier to work with.  E.g.:
> 
> int y()
> {
>       ASSERT(m_y != BAD_VALUE);
>       return m_y;
> }

If possible, I'd like to establish clarity on what "trivial" or "nontrivial" 
means. This can save us debates in future patch reviews about what's "trivial 
enough".

To me, "trivial" means short. My straw-man proposal is "one-line functions 
only".

Failing that, I would at least like to pick some number. Maybe 6 lines, since 
that's just enough for a branch with an early return.

Thought complexity notwithstanding, non-trivial functions mainly get in the way 
of reading an interface because they take up space. "int x() { return m_x; }" 
is fine by me because it doesn't add any lines of code over "int x();". 
Notably, the next shortest function possible in WebKit style after one line is 
five lines. That means that I see 5X less of the class declaration in one 
screenful of code, and I have to do 5X more scrolling before I can see the data 
members in a class. To me, that's a significant blow to readability for a 
slight improvement in write-ability. Given that reading is more common than 
writing, I'm inclined to argue that >1 line functions are not worth it.

In general, I think brevity in class declarations is particularly important. I 
often find myself needing to read all of the public interfaces of a class, or 
look at a declaration in relation to a prior "public" or "private" keyword, or 
scroll past the interface declarations to get to the data members. (In 
contrast, I rarely need to read all of the function implementations of a class 
at once, or scroll to a specific lexical location among a set of function 
implementations.) Within some limits, I'm willing to write code more slowly so 
I can read declarations more quickly.

Geoff
_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to