Recommended coding standards

The following are the coding standards that the Cocos Creator development team use. They are included in the manual for game developers and tool developers reference.

Naming standards

  • When we name the variables, functions and living examples, we use camelCase nomenclature

     // bad
     var FOOBar = {};
     var foo_bar = {};
     function FOOBar () {}
    
     // good
     var fooBar = {};
     function fooBar () {}
    
  • When we name types or modules, we use PascalCase nomenclature

     // bad
     var foobar = cc.Class({
         foo: 'foo',
         bar: 'bar',
     });
     var foobar = require('foo-bar');
    
     // good
     var FooBar = cc.Class({
         foo: 'foo',
         bar: 'bar',
     });
     var FooBar = require('foo-bar');
    
  • It is recommended to use full uppercase underline to name “constant”.

     // bad
     const PRIVATE_VARIABLE = 'should not be unnecessarily uppercased within a file';
    
     // bad
     var THING_TO_BE_CHANGED = 'should obviously not be uppercased';
    
     // bad
     let REASSIGNABLE_VARIABLE = 'do not use let with uppercase variables';
    
     // ---
    
     // allowed but does not supply semantic value
     export const apiKey = 'SOMEKEY';
    
     // better in most cases
     export const API_KEY = 'SOMEKEY';
    
     // ---
    
     // bad - unnecessarily uppercases key while adding no semantic value
     export const MAPPING = {
         KEY: 'value'
     };
    
     // good
     export const Type = {
         SIMPLE: 'value'
     };
    
  • Use underscores _ when naming private attributes

     // bad
     this.__firstName__ = 'foobar';
     this.firstName_ = 'foobar';
    
     // good
     this._firstName = 'foobar';
    
  • We use dash nomenclature for files

     // bad
     fooBar.js
     FooBar.js
    
     // good
     foo-bar.js
    

Grammar standards

  • Use Object.create(null) to create an object

     // bad
     var obj = new Object();
    
     // bad
     var obj = {};
    
     // good
     var obj = Object.create(null);
    
  • Use [] to create an array

     // bad
     var array = new Array();
    
     // good
     var array = [];
    
  • Try your best to use single quotation marks '' to define a string in js code

     // bad
     var str = "Hello World";
    
     // good
     var str = 'Hello World';
    
  • When defining multi-lines string, try your best to use +

     // bad
     const errorMessage = 'This is a super long error that was thrown out because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';
    
     // bad
     const errorMessage = 'This is a super long error that was thrown out because \
     of Batman. When you stop to think about how Batman had anything to do \
     with this, you would get nowhere \
     fast.';
    
     // good
     const errorMessage = 'This is a super long error that was thrown out because ' +
       'of Batman. When you stop to think about how Batman had anything to do ' +
       'with this, you would get nowhere fast.';
    
  • Use === and !== rather than == and !=.

Grammar standards

  • Choose quadruple spacing or double spacing for indentation according to your own habits and the primary code writer's format.

     // bad
     function() {
     ∙var name;
     }
    
     // very bad
     function() {
     ∙∙<tab>∙∙var name;
     }
    
     // good
     function() {
     ∙∙var name;
     }
    
     // good
     function() {
     ∙∙∙∙var name;
     }
    
  • Do not leave spaces at the end of the line. Leave an empty line at the bottom of the file

     // bad
     function () {∙
     ∙∙∙∙var name;∙
     }
     /* EOF */
    
     // good
     function () {
     ∙∙∙∙var name;
     }
    
     /* EOF */
    
  • Please add ; at the end of the statement.

     // bad
     proto.foo = function () {
     }
    
     // good
     proto.foo = function () {
     };
    
     // bad
     function foo () {
         return 'test'
     }
    
     // very bad
     //   returns `undefined` instead of the value on the next line,
     //   always happens when `return` is on a line by itself because of Automatic Semicolon Insertion!
     function foo () {
         return
             'test'
     }
    
     // good
     function foo () {
         return 'test';
     }
    
     // bad
     function foo () {
     };
    
     // good, this is not the end of the statement
     function foo () {
     }
    
  • Try to put { and the expression in the same line

     // bad
     if ( isFoobar )
     {
     }
    
     // good
     if ( isFoobar ) {
     }
    
     // bad
     function foobar()
     {
     }
    
     // good
     function foobar() {
     }
    
     // bad
     var obj =
     {
         foo: 'foo',
         bar: 'bar',
     }
    
     // good
     var obj = {
         foo: 'foo',
         bar: 'bar',
     }
    
  • Put a space before {

     // bad
     if (isJedi){
         fight();
     }
     else{
         escape();
     }
    
     // good
     if (isJedi) {
         fight();
     }
     else {
         escape();
     }
    
     // bad
     dog.set('attr',{
         age: '1 year',
         breed: 'Bernese Mountain Dog',
     });
    
     // good
     dog.set('attr', {
         age: '1 year',
         breed: 'Bernese Mountain Dog',
     });
    
  • Please put a space before ( of the logic state expressions ( if, else, while, switch)

     // bad
     if(isJedi) {
         fight ();
     }
     else{
         escape();
     }
    
     // good
     if (isJedi) {
         fight();
     }
     else {
         escape();
     }
    
  • Leave one space between the binary ternary operators

     // bad
     var x=y+5;
     var left = rotated? y: x;
    
     // good
     var x = y + 5;
     var left = rotated ? y : x;
    
     // bad
     for (let i=0; i< 10; i++) {
     }
    
     // good
     for (let i = 0; i < 10; i++) {
     }
    
  • The way some functions are declared

     // bad
     var test = function () {
         console.log('test');
     };
    
     // good
     function test () {
         console.log('test');
     }
    
     // bad
     function divisibleFunction () {
         return DEBUG ? 'foo' : 'bar';
     }
    
     // good
     var divisibleFunction = DEBUG ?
         function () {
             return 'foo';
         } :
         function () {
             return 'bar';
         };
    
     // bad
     function test(){
     }
    
     // good
     function test () {
     }
    
     // bad
     var obj = {
         foo: function () {
         }
     };
    
     // good
     var obj = {
         foo () {
         }
     };
    
     // bad
     array.map(x=>x + 1);
     array.map(x => {
         return x + 1;
     });
    
     // good
     array.map(x => x + 1);
    
  • Put a space between Block definitions

     // bad
     if (foo) {
         return bar;
     }
     return baz;
    
     // good
     if (foo) {
         return bar;
     }
    
     return baz;
    
     // bad
     const obj = {
         x: 0,
         y: 0,
         foo() {
         },
         bar() {
         },
     };
     return obj;
    
     // good
     const obj = {
         x: 0,
         y: 0,
    
         foo() {
         },
    
         bar() {
         },
     };
    
     return obj;
    
  • Do not use a comma to define

     // bad
     var story = [
           once
         , upon
         , aTime
     ];
    
     // good
     var story = [
         once,
         upon,
         aTime,
     ];
    
     // bad
     var hero = {
           firstName: 'Ada'
         , lastName: 'Lovelace'
         , birthYear: 1815
         , superPower: 'computers'
     };
    
     // good
     var hero = {
         firstName: 'Ada',
         lastName: 'Lovelace',
         birthYear: 1815,
         superPower: 'computers',
     };
    
  • Single line comments, please add a space after the slash

     //bad
     // good
    
  • Multiline comments

     /*
      * good
      */
    
  • A multiline comments that needs to be exported to the API document

     /**
      * good
      */
    

airbnb/es5

results matching ""

    No results matching ""