Стандарты кодирования JavaScript для улучшения качества вашего кода
Стандарты кодирования могут помочь в следующем:
- Сохраняет целостность кода
- Легче читать и понимать
- Легче для сопровождающего
Приведенные ниже стандарты кодирования представляют собой мое собственное мнение о том, что может помочь в вышеуказанных вопросах.
При сравнении используйте === вместо ==
Это важно, потому что JavaScript является динамическим языком, поэтому использование ==
может дать вам неожиданные результаты, так как позволяет использовать другой тип.
Ошибка:
if (val == 2)
Пройден:
if (val === 2)
Никогда не используйте var
, используйте вместо него let
Самый простой способ: let
поможет с любыми проблемами с областью видимости, которые var
вызывают в JavaScript.
Ошибка:
var myVar = 10;
Пройден:
let myVar = 10;
Используйте const
вместо let
Это останавливает разработчиков, пытающихся изменить то, что им не следует, и действительно помогает улучшить удобочитаемость.
Ошибка:
let VAT_PERCENT = 20;
Пройден:
const VAT_PERCENT = 20;
Всегда используйте точку с запятой (;)
Хотя это необязательно в JavaScript, поскольку точки с запятой не нужны в качестве терминаторов операторов, как в других языках. Использование ;
действительно помогает сохранить согласованность кода и отлично подходит для разделителей операторов.
Ошибка:
const VAT_PERCENT = 20; let amount = 10 return addVat(amount, vatPercent)
Пройден:
const vatPercent = 20; let amount = 10; return addVat(amount, vatPercent);
Соглашения об именах в JavaScript
let
должно быть camelCase
const
, если в верхней части файла используется верхний регистр "змея". MY_CONST
. Если не вверху файла, используйте camelCase
class
должно быть PascalCasing. MyClass
functions
должно быть camelCase
. myFunction
Используйте шаблонные литералы при обращении к строкам
Литералы шаблона - это строковые литералы, допускающие встроенные выражения.
Если вам нужно поддерживать IE11 или ниже, они не поддерживают строковые литералы
Ошибка:
let fullName = firstName + " " + lastName;
Пройден:
let fullName = `${firstName} ${lastName}`;
По возможности используйте стрелочные функции ES6
Стрелочные функции - это более краткий синтаксис для написания выражения функции. Они анонимны и меняют способ this
связывания функций.
Ошибки:
var multiply = function(a, b) {
return a* b;
};
Пройден:
const multiply = (a, b) => { return a * b};
Всегда используйте фигурные скобки вокруг управляющих структур
Скобки необходимы для всех управляющих структур (т.е. if
, else
, for
, do
, while
, а также любых других)
Это может разделить мнение с помощью однострочных if
операторов, но сколько раз это приводило к ошибкам, если не использовались фигурные скобки. Это может привести к тому, что разработчики добавят другие операторы, думая, что условный оператор окружает его.
Например
if (myNumber === 0) doSomething(); doSomethingElse(); // This will always run!! // This is actually what is happening if (myNumber === 0) { doSomething(); } doSomethingElse();
Вот так и должно быть:
Ошибка:
if (valid) doSomething(); if (amount > 100) doSomething(); else if(amount > 200) doSomethingElse();
Пройден:
if (valid) { doSomething(); } if (amount > 100) { doSomething(); } else if(amount > 200) { doSomethingElse(); }
Кроме того, убедитесь, что в JavaScript фигурная скобка начинается на одной строке с пробелом между ними.
Ошибка:
if (myNumber === 0) { doSomething(); }
Проходить:
if (myNumber === 0) { doSomething(); }
Попробуйте уменьшить вложенность
if
внутри if
может стать беспорядочным и очень трудным для чтения, очень быстро. Иногда у вас может не получиться обойтись, но всегда смотрите на структуру вашего JavaScript, чтобы увидеть, можете ли вы ее изменить.
Ошибка:
if (myNumber > 0) { if (myNumber > 100) { if (!hasDiscountAlready) { return addDiscountPercent(0); } else { return addDiscountPercent(10); } } else if (myNumber > 50) { if (!hasDiscountAlready) { return addDiscountPercent(5); } } else { if (!hasDiscountAlready) { return addDiscountPercent(0); } else { return addDiscountPercent(1); } } } else { error(); }
Пройден:
if (myNumber <= 0) { return error; } if (!hasDiscountAlready) { return addDiscountPercent(0); } if (myNumber > 100) { return addDiscountPercent(10); } if (myNumber > 50) { return addDiscountPercent(5); } return addDiscountPercent(1);
Как видно из приведенного выше примера, это намного легче читать. В большинстве случаев я стараюсь по возможности избегать чужого. Еще один совет - сначала попробуйте провести проверку. Как показано ниже:
Ошибка:
if (valid) { return buy(); } else { return error(); }
Пройден:
return valid ? buy() : error();
Попробуйте указать «максимальную» длину строки для файлов и функций
Это может быть сложно, поскольку все приложения разные, но я думаю, что важно иметь руководство, когда вы думаете, что определенные части кода становятся слишком большими. Возможно, вам придется немного поэкспериментировать, чтобы найти подходящую длину.
Примеры:
files
максимум 80 строк кода
functions
максимум 15 строк кода
Имена файлов в нижнем регистре
MyFile.js
должно быть myFile.js
По возможности используйте параметры по умолчанию
В JavaScript, если вы не передаете значение в параметр при вызове функции, оно будет undefined
Ошибка:
myFunction(a, b) { return a + b; }
Пройден:
myFunction(a = 0, b = 0) { return a + b; }
В операторах переключения должно использоваться break
и default
Обычно я стараюсь не рекомендовать использование операторов switch, но вы действительно хотите их использовать, убедитесь, что вы break
каждое условие и используете default
.
Ошибка:
switch (myNumber) { case 10: addDiscountPercent(0); case 20: addDiscountPercent(2); case 30: addDiscountPercent(3); }
Пройден:
switch (myNumber) { case 10: addDiscountPercent(0); break; case 20: addDiscountPercent(2); break; case 30: addDiscountPercent(3); break; default: addDiscountPercent(0); break; }
Используйте named
exports
Не используйте default
экспорт. Импортируемые модули должны давать имена этим значениям, что может привести к несогласованности в именовании модулей.
Ошибка:
export default class MyClass {
Пройден:
export class MyClass {
Не используйте импорт с подстановочными знаками
Это гарантирует, что у вас будет один экспорт по умолчанию.
Ошибка:
import * as Foo from './Foo';
Пройден:
import Foo from './Foo';
Используйте ярлыки для логических значений
Ошибка:
if (isValid === true) if (isValid === false)
Пройден:
if (isValid) if (!isValid)
Старайтесь избегать ненужных троичных операторов
Ошибка:
const boo = a ? a : b;
Пройден:
const boo = a || b;
Используйте только одну переменную в объявлении
Это может снова разделиться во мнениях, но я чувствую, что объявляя сразу несколько, иногда их можно упустить.
Ошибка:
let a = 1, b = 2;
Пройден:
let a = 1; let b = 2;
Заключение
Стандарты кодирования на любом языке действительно могут помочь с удобочитаемостью приложения и удобством сопровождения. Одна вещь, которая может быть сложной, если вы работаете в команде, - это соблюдение стандартов кодирования. Вот несколько идей, которые могут вам помочь:
- Рецензии, просматривающие код построчно.
- Линтинг или какой-то анализатор кода
- Создание согласованного приложения, в котором каждый разработчик знает, что ему нужно создать / обновить.
- Создавая что-то новое, позвольте одному из ваших старших разработчиков начать это, так как другие разработчики могут использовать этот код в качестве руководства.