Idiomatic.js — Принципы написания консистентного, идиоматического кода на JavaScript

в 17:06, , рубрики: javascript, Веб-разработка, Программирование

Доброго времени суток уважаемые читатели. Буквально недавно я наткнулся на очень интересный и необычный проект на Github, который посвящен замечательному языку программирования JavaScript и называется Idiomatic.js.

Данный проект — попытка авторов создать спецификацию, определяющую список норм и правил написания кода на JavaScript, некий «кодекс чести» для программистов. В написании данного документа приняли участие свыше 20 матерых разработчиков. Предложенная специфика уже переведена на 12 языков. Idiomatic.js уже набрал 4500 старов, 500 форков и даже привлек внимание у компании Mozilla, поскольку ссылка на него уже размещена на главной странице MDN Javascript в разделе «Инструменты и дополнительные ресурсы».

Код в любом проекте должен выглядеть так, будто его писал один человек, неважно как много людей работали над ним

Приведу несколько цитат от авторов проекта:

«Все последующее является списком норм, которыми я руководствуюсь при написании кода, чьим автором я являюсь; любой вклад в проекты, которые я создал, должен отвечать этим нормам. Я не намерен навязывать свои предпочтения в стиле другим людям или проектам; собственный стиль написания кода достоин уважения.»

Rick Waldron

«Чтобы быть хорошим управляющим проекта, нужно понимать, что писать код для себя это Плохая Идея. Если тысячи людей используют ваш код, то пишите свой код максимально понятно, а не на собственное усмотрение.»

Idan Gazit

«Споры по поводу стилей бессмысленны. У вас должно быть руководство по стилю и вы должны следовать ему.»

Rebecca Murphey


Пример документа:

Красивый Синтаксис

A. Скобки, Фигурные Скобки, Переносы Строк

// if/else/for/while/try всегда разделяются пробелом,
// это улучшает читабельность

// 2.A.1.1
// Пример неразборчивого синтаксиса

if(condition) doSomething();

while(condition) iterating++;

for(var i=0;i<100;i++) someInterativeFn();

// 2.A.1.1
// Используйте пробелы для того, чтобы улучшить читабельность

if ( condition ) {
  // выражения
}

while ( condition ) {
  // выражения
}

for ( var i = 0; i < 100; i++ ) {
  // выражения
}

// Еще лучше:

var i,
  length = 100;

for ( i = 0; i < length; i++ ) {
  // выражения
}

// Или...

var i = 0,
  length = 100;

for ( ; i < length; i++ ) {
  // выражения
}

var prop;

for ( prop in object ) {
  // выражения
}

if ( true ) {
  // выражения
} else {
  // выражения
}

B. Присваивание, Объявление, Функции (Именованные, Функции-Выражения, Функции-Конструкторы)

// 2.B.1.1
// Переменные
var foo = "bar",
  num = 1,
  undef;

// Объявление литералов:
var array = [],
  object = {};

// 2.B.1.2
// Использование только одного `var` на одну область видимости улучшает читабельность
// и упорядочивает блок объявления переменных (также сохраняет вам несколько нажатий клавиш)

// Неправильно
var foo = "";
var bar = "";
var qux;

// Правильно
var foo = "",
  bar = "",
  quux;

// или...
var // комментарий для переменных
foo = "",
bar = "",
quux;

// 2.B.1.3
// Оператор var всегда должен быть в начале области видимости (функции).
// То же самое верно для констант и оператора let из ECMAScript 6.

// Неправильно
function foo() {

  // выражения

  var bar = "",
    qux;
}

// Правильно
function foo() {
  var bar = "",
    qux;

  // все выражения после объявления переменных.
}

// 2.B.2.1
// Объявление Именованных Функций
function foo( arg1, argN ) {

}

// Использование
foo( arg1, argN );

// 2.B.2.2
// Объявление Именованных Функций
function square( number ) {
  return number * number;
}

// Использование
square( 10 );

// Очень надуманный стиль передачи параметров
function square( number, callback ) {
  callback( number * number );
}

square( 10, function( square ) {
  // обратный вызов
});

// 2.B.2.3
// Функция-Выражение
var square = function( number ) {
  // вернуть что-то ценное и важное
  return number * number;
};

// Функция-Выражение с Идентификатором
// Такое объявление хорошо тем, что функция может вызвать сама себя
// и ее имя будет видно в стеке вызова функций:
var factorial = function factorial( number ) {
  if ( number < 2 ) {
    return 1;
  }

  return number * factorial( number-1 );
};

// 2.B.2.4
// Объявление Конструктора
function FooBar( options ) {

  this.options = options;
}

// Использование
var fooBar = new FooBar({ a: "alpha" });

fooBar.options;
// { a: "alpha" }


На мой взгляд проект достоин внимания широкой публики. Я считаю, что массовое соблюдение подобных нормативов улучшит и упорядочит разработку, более того «дисциплина» написания, возможно повлияет на сокращение «быдлокода» в целом. Если идея распространиться в нео сфере, то подобная специфика появиться и для других языков программирования, а спустя время даже некачественные сайты обучающие кодингу, на которых регулярно обучаются новички, будут содержать корректный консистентный идиоматический код.

Я не являюсь программистом с богатым опытом, но если Вы такой, то вместе с авторами проекта призываю Вас принять участие в улучшении этого «живого документа»: fork, clone, branch, commit, push, pull request.

Да будет же мир кода лучше! Спасибо всем за внимание.

Автор: ilusha_sergeevich

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js