Difference between revisions of "JavaScript coding conventions"

From PKP Wiki
Jump to: navigation, search
m (typo)
(Changed visibility approach to reflect switch to Google approach)
Line 15: Line 15:
 
We do not generally use the @protected and @private markers that Google recommends. We do, however, implement the following nomenclature for class members (properties and methods):
 
We do not generally use the @protected and @private markers that Google recommends. We do, however, implement the following nomenclature for class members (properties and methods):
 
* We group members by visibility and class (static) vs. object (instance) membership:
 
* We group members by visibility and class (static) vs. object (instance) membership:
** First static then instance members.
+
** private static class variables (start with underscore)
** Within those two groups: first public members, then protected members and finally private members.
+
** private instance variabes (start with underscore)
** Sections are divided with a three line // style comment indicating static vs. instance membership and visibility of class/object members grouped below the comment.
+
** protected instance variables (discouraged)
 +
** public static class variables or instance variables are not allowed!
 +
** public static methods
 +
** public methods
 +
** protected static methods
 +
** protected methods
 +
** private static methods (start with underscore)
 +
** private methods (start with underscore)
 +
* Sections are divided with a three line // style comment indicating the class member category.
 
* An underscore at the start of the name marks a class member private. You are not supposed to use such a member outside scope even if the visibility is not enforced by closure.
 
* An underscore at the start of the name marks a class member private. You are not supposed to use such a member outside scope even if the visibility is not enforced by closure.
 
* Protected class members are named like public methods but they must not be used outside of the inheritance hierarchy of the current class.
 
* Protected class members are named like public methods but they must not be used outside of the inheritance hierarchy of the current class.

Revision as of 08:53, 11 December 2010

Google Coding Conventions

We use Google's JavaScript style guide as a starting point for our own style guide.

Only deviations from the Google style guide will be documented here.

JsDoc Comments

We use JsDoc comments as outlined in the Google style guide with but we name the variable name directly after the @param tag and the type without curly braces.

Generally we encourage inline comments. These help readers of your code to understand the logic without having to understand every line of code. It's also a good practice to write inline comments before you write code so that you first think about the logic and semantics you want to implement and then about the syntax.

Visibility

We do not generally use the @protected and @private markers that Google recommends. We do, however, implement the following nomenclature for class members (properties and methods):

  • We group members by visibility and class (static) vs. object (instance) membership:
    • private static class variables (start with underscore)
    • private instance variabes (start with underscore)
    • protected instance variables (discouraged)
    • public static class variables or instance variables are not allowed!
    • public static methods
    • public methods
    • protected static methods
    • protected methods
    • private static methods (start with underscore)
    • private methods (start with underscore)
  • Sections are divided with a three line // style comment indicating the class member category.
  • An underscore at the start of the name marks a class member private. You are not supposed to use such a member outside scope even if the visibility is not enforced by closure.
  • Protected class members are named like public methods but they must not be used outside of the inheritance hierarchy of the current class.