JavaScript Coding Style

JavaScript Coding Style

·

5 min read


Code style is the art of programming to make code more readable and clean. Below are the rules and reasons for code styles:


Curly braces

Curly braces signify where a scope starts and ends. There should always be a space between curly braces and keywords, closing parentheses or characters.

if (condition) {
    // statements
}

Line Length

Lengthy code spanning an entirely new line is a bad practice. It is advisable to break or split such code into multiple lines for readability at a glance.

See the example below:

const str = `
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Unde soluta 
nihil consequatur minima rem officiis hic dignissimos dolorem quae 
nemo accusamus consequuntur, quos quibusdam asperiores a ad 
totam sunt id.
`

The number of characters (including spaces) in a single line should not exceed 79 characters. Check the col (column) mostly at the bottom of a text editor to get the length of characters.

For multiple parameters in functions or conditions in a loop, the rule extends to them. Rest parameter is recommended for more than three parameters when necessary.

Lengthy code in a single line (line 1) is a bad practice. See below:

const peopleGrades = (index, para1, para2, para3, para4, para5) => {
  const names = [ para1, para2, para3, para4, para5 ];
  return names[index];
}

peopleGrades(2, 4, 5, 2, 8, 2) // 2 ;

Lengthy code broken in multiple lines is good practice. See below:

const peopleGrades = (index, 
                     para1, 
                     para2, 
                     para3, 
                     para4, 
                     para5
                    ) => {
  const names = [ para1, para2, para3, para4, para5 ];
  return names[index];
}

peopleGrades(2, 4, 5, 2, 8, 2);

A better practice is to use a rest parameter (...para) when necessary - We will see that in a different article. See below:

const peopleGrades = (index, ...para) => {
  const names = [ ...para ];
  return names[index];
};

peopleGrades(2, 4, 5, 2, 8, 2);

Besides rest operators, there's also a spread operator! - we will see that also in a different article.


Vertical Indents

Insert extra newlines to divide logical blocks like in function scope.

function add3s(x, y) {
  let result = 10;
  // empty new line
  for (let i = 0; i <= y; i++) {
    result += x;
  }
  // empty new line
  return result
}

console.log( add3s(3, 2) ); // 19

There should not be more than nine lines of code without a vertical indentation.

If you are wondering how we got 19, see below:

function add3s(x, y) {
  let result = 10;

  for (let i = 0; i <= y; i++) {
    result += x;  // result = result + x
    // result(i0) = result + 3 => 13 
    // result(i1) = result + 3; => result(i0) + 3 = 16 
    // result(i2) = result + 3; => result(i1) + 3 = 19
  } 

  return result;
  // result(y) = result + 3; => 19 
}

console.log( add3s(3, 2) );

Hint: Inner scope is reachable to their immediate outer scope (and global scope). That is why the result in the for loop reaches its value, 10 for each iteration (i₀ to i₂).


Semicolons

Code will run perfectly well most of the time without semicolons, but you may never know when statements without semicolons can lead to bugs (errors). That is, automatic semicolon insertion fails sometimes.

See the example below:

alert("There will be an error")

[1, 2].forEach(alert)


For a script containing complex codes in between the code below, you will agree that it will be difficult to trace the error.

Experienced JavaScript programmers may omit semicolons by importing modules to the script file like configuring with StandardJS.

Debugged example above:

alert("There will be no error");

[1, 2].forEach(alert);

Nesting Levels

Try to avoid many nesting levels when necessary. Use the continue statement to avoid extra nesting when applicable.

for (let i = 0; i <10; i++) {
  if (condition) {
    // new nesting level
  }
}

We can reduce the nesting level above. See below:

for (let i = 0; i <10; i++) {
  if (!condition) continue;
    // no nesting level
}

See another example below:

More nesting levels:

function pow(x, n) {
  if (n < 0) {
    console.log("🤔");
  } else {
    let result = 1;

    for (let i = 0; i < n; i++) {
      result *= x;
    }

    return result;
  }
}

pow(2, 3); // 8 => 2³

Lesser nesting levels:

function pow(x, n) {
  if (n < 0) {
    console.log("🤔");
    return;
  }

  let result = 1;

  for (let i = 0; i < n; i++) {
    result *= x;

    return result;
  }
}

Helper functions

Helper functions make code more readable. Use them when necessary.


Style Guides

There are more general rules to properly style code. Especially when working in a team, a consistent uniform code is a best practice.

See the list below:


Automated Linters

Linters are tools that automatically check code styles to make improvement suggestions.

It also checks bugs, like typos in variable or function names.

Here are some well-known linting tools:

Most editors already have linting tools enabled by default (NodeJS installation required).

Also, certain IDEs have built-in linting, which is convenient but not as customizable as ESLint.

Happy Coding!!!


Buy me a Coffee


TechStack | Domain

  • Purchase a .com domain name as low as $9.99.
  • Purchase a .net domain name as low as $12.99.
  • Get cheaper domain names as low as $3.
  • Build a website with ease.