Coding standards for Colossus
- * Do not put tab characters in code, period. Use spaces only. There is
no standard tab stop in Java, so tabs will look bad for anyone whose
editor is set up differently than that of the person who put tabs in the
code. Configure your editor to emit the appropriate number of spaces
rather than a hard tab when you hit the tab key. (Of course, Makefiles
are an exception, because you have to use tabs in them. Ick.) "ant
fix" converts tabs to spaces for you, but it assumes a tab stop of 8
unless you change it.
- * Wrap code at 79 characters. This is a pain sometimes, but it allows
easly working with the code using 80-column editor and terminal windows.
(Remember, code is not just viewed through your favorite editor in your
favorite GUI desktop. It's also emailed around, diffed, viewed in
debugger windows, fiddled with on remove servers through network
connections, etc.)
- * Put opening braces at the beginning of a new line rather than the end
of the previous line. This decision has been argued for decades and will
never be settled (at least not until all language designers follow
Python's lead and just ditch the braces), but consistency within a
project is more important than personal preference.
- Keep all member variables private, except for constants. Use get/set
methods to share. (But don't automatically add an accessor and
mutator for every variable, just for the ones that actually need them.)
This adds some overhead up front but makes it easier to refactor code
later.
- Try to comment stuff, at least at the method level for non-trivial
and non-private methods. But there's no need to go overboard
commenting obvious stuff. Use javadoc comments instead of regular
comments where applicable.
- Every method in the .client and .server packages should be either
private (if possible) or package private (if needed by other classes in
the package), unless it needs to be public. And just because a method is
public doesn't mean it should be called from outside the
package.
- Some methods are private because they're not used outside of
their class, not necessarily because they shouldn't be used outside
of their class. Some classes are final because they're not currently
subclassed, not because they should never be subclassed. These are
optimizations for both programmers (who don't need to check to see if
other classes call / override something before changing it if it's
tagged private / final) and for the JVM, not necessarily final design
statements. So feel free to change such things as necessary, until the
interfaces are finalized and polished and other people depend upon
them.
- Always do a cvs diff before you check code in. That way changes you
didn't want to commit won't sneak in. And you'll be able to write a
better check-in comment.
- * Fully brace conditionals, even if the clause is only one line and
doesn't technically need braces. This makes the code taller, but
easier to read and change.
- Keep files in Unix endline format (LF, not Windows format (CR/LF) or
old Mac format (CR). This is critical for Makefiles, which will sometimes
stop working if the line breaks are wrong. Java files will work either
way, but it's annoying to have a mix of line breaks, false diffs
caused by files getting converted back and forth, etc. so consistent Unix
format is best. "ant fix" is your friend.
- Otherwise just try to follow the existing format. A foolish
consistency may be the hobgoblin of little minds, but it sure makes code
easier to read.
Thanks for reading this.
(Rules marked with '*' are automatically enforced on CVS check-in using
Jacobe.)