azarro / coding-style

Перевод стиля кода от LFeh на русский язык

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Стиль кода от LFeh

"Каждая линия кода должна быть написана так, будто её писал лишь один человек, вне зависимости от количества разработчиков." - Китайская народная пословица.

Этот документ описывает правила написания кода для языков, которые я использую: HTML, CSS и Javascript.

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

Так как это новый документ, некоторые участки кода в старых проектах могут не соответствовать данным правилам.

Этот документ постоянно обновляется и время от времени могут появляться изменения

Содержание

  1. [Git] (#commits)
  2. [HTML] (#html)
  3. [CSS] (#css)
  4. [Javascript] (#js)
  5. Ссылки
  6. Переводы
  7. Лицензия

1. Git

Для облегчения содействия других людей в проектах, все описания commit'ов, названия pull request'ов или записей о багах должны быть написаны на Английском языке

Прежде чем commit'ить что-либо, нужно проверять, нет ли других commit'ов с таким названием. Если такие есть, писать номер исправления после символа #

// Правильно
git commit -m "Add placeholder in input #10"

// Неправильно
git commit -m "Add placeholder in input"

2. HTML

Основы раздела про HTML взяты с "Code Guide by @mdo".

Оглавление HTML

  1. [Синтаксис HTML] (#html-syntax)
  2. [Комментарии HTML] (#html-comments)
  3. [Кодировка документов HTML] (#html-encoding)
  4. [Порядок аттрибутов в HTML] (#html-attribute-order)
  5. [Производительность HTML-кода] (#html-performance)
  6. [Базовый шаблон HTML-кода] (#html-base)

2.1. Синтаксис HTML

Используйте мягкую табуляцию размером в два символа пробела. Это настраивается в редакторе кода.

<!-- Правильно -->
<nav class="nav">
  <ul class="nav-menu">
    <li class="nav-item">
      <a class="nav-link">

<!-- Неправильно -->
<nav class="nav">
      <ul class="nav-menu">
            <li class="nav-item">
                  <a class="nav-link">

Всегда используйте двойные кавычки в HTML.

<!-- Правильно -->
<div class="main">

<!-- Неправильно -->
<div class='main'>

Не включайте символ '/' в самозакрывающиеся теги.

<!-- Правильно -->
<hr>

<!-- Неправильно -->
<hr />

Разделяйте блочные элементы пустой строкой и группируйте внутренние элементы блоков

<!-- Правильно -->
<ul class="nav-tabs">
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li>...</li>
</ul>

<div class="tab-content">
  ...
</div>

<!-- Неправильно -->
<ul class="nav-tabs">

  <li>...</li>

  <li>...</li>

  <li>...</li>

  <li>...</li>

</ul>
<div class="tab-content">
  ...
</div>

2.2. Комментарии в HTML

Следуйте этому правилу при написании комментариев:

<!-- Пример комментариев в HTML -->
<!-- /Конец примера комментариев в HTML -->

2.3. Кодировка HTML-документво

Всегда используйте кодировку UTF-8 в документах.

<head>
  <meta charset="UTF-8">
</head>

2.4. Порядок аттрибутов в HTML

Аттрибуты в HTML должны следовать данному порядку для облегчения чтения кода.

  1. class
  2. id, name
  3. data-*
  4. src, for, type, href
  5. title, alt
  6. aria-*, role
<a class="..." id="..." data-modal="toggle" href="#">

<input class="form-control" type="text">

<img class="img-rounded" src="..." alt="...">

2.5. Производительность HTML

Нет необходимости указывать тип CSS и JS файлов в аттрибуте type, такие как text/css и text/javascript.

<!-- Правильно -->
<link rel="stylesheet" href="assets/css/style.css" />
<script src="scripts.min.js"></script>

<!-- Не правильно -->
<script src="scripts.min.js"></script>
</head>
<body>

Для увеличения скорости загрузки страницы указывайте ссылки на Javascript-скрипты перед закрывающим тегом <body>.

<!-- Правильно -->
<script src="scripts.min.js"></script>
</body>

<!-- Не правильно -->
<script src="scripts.min.js"></script>
</head>
<body>

Всегда сокращайте код в проектах на чистом HTML. Таск-менеджеры, вроде Grunt leaves this easier.

<!-- Good -->
<html><head>...</head><body><div class="container">...</div></body></html>

<!-- Bad -->
<html>
  <head>
    ...
  </head>
  <body>
    <div class="container">
      ...
    </div>
  </body>
</html>

2.6. Базовый шаблон HTML-документа

Этот код следует использовать для быстрого начала работы над новым проектом:

<!DOCTYPE html>
<html lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="width=device-width">

<link rel="shortcut icon" href="assets/img/ico/favicon.ico" />
<link rel="logo" type="image/svg" href="../assets/img/logo/logo.svg" />
<link rel="stylesheet" href="assets/css/style.css" />

<title></title>

</head>
<body>

<!-- Скрипты -->
<script src="assets/js/scripts.min.js"></script>

</body>
</html>

Немного совместимости с IE...

<!DOCTYPE html>
<!--[if IE]><![endif]-->
<!--[if IE 7 ]> <html lang="en" class="ie7">    <![endif]-->
<!--[if IE 8 ]>    <html lang="en" class="ie8">    <![endif]-->
<!--[if IE 9 ]>    <html lang="en" class="ie9">    <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--><html lang="en"><!--<![endif]-->
<head>
...

3. CSS

Основы раздела про CSS взяты с Code Guide by @mdo и "Разговорный CSS".

Оглавление CSS

  1. [Синтаксис CSS] (#css-syntax)
  2. [Порядок обьявления в CSS] (#css-order)
  3. [Имена классов в CSS] (#css-class-name)
  4. [Производительность CSS] (#css-performance)
  5. [Адаптивность и @media-запросы] (#mobile-first-and-media-queries)
  6. [Препроцессоры] (#css-pre-processors)
  7. [Комментарии в CSS] (#css-comments)

3.1. Синтаксис

Используйте мягкую табуляцию размером в два символа пробела. Это настраивается в редакторе кода.

/* Правильно */
.nav-item {
  display: inline-block;
  margin: 0 5px;
}

/* Неправильно */
.nav-item {
    display: inline-block;
    margin: 0 5px;
}

Всегда используйте двойные кавычки.

/* Правильно */
[type="text"]
[class^="..."]

.nav-item:after {
  content: "";
}

/* Неправильно */
[type='text']
[class^='...']

.nav-item:after {
  content: '';
}

Всегда вставляйте один пробел перед символом фигурной скобки

/* Правильно */
.header {
  ...
}

/* Неправильно */
.header{
  ...
}

После двоеточия объявления свойства также вставляйте один пробел

/* Правильно */
.header {
  margin-bottom: 20px;
}

/* Неправильно */
.header{
  margin-bottom:20px;
}

В блоке объявлений свойств после каждого свойства всегда вставляйте точку с запятой

/* Правильно */
.header {
  margin-bottom: 20px;
}

/* Неправильно */
.header{
  margin-bottom:20px
}

Каждый селектор при его объявлении пишите на отдельной строке

/* Правильно */
.selector-1,
.selector-2,
.selector-3 {
  ...
}

/* Неправильно */
.selector-1, .selector-2, .selector-3 {
  ...
}

Обьявления селекторов с единственным свойством пишите вместе со свойством на одной строке

/* Правильно */
.selector-1 { width: 50%; }

/* Неправильно */
.selector-1 {
  width: 50%;
}

Разделяйте каждое объявление селектора пустой строкой

/* Правильно */
.selector-1 {
  ...
}

.selector-2 {
  ...
}

/* Неправильно */
.selector-1 {
  ...
}
.selector-2 {
  ...
}

Используйте нижний регистр и сокращения для обозначения шестнадцетиричных цветов

Не пишите обозначений для нулевых величин.

/* Правильно */
.selector-1 {
  color: #aaa;
  margin: 0;
}

/* Неправильно */
.selector-1 {
  color: #AAAAAA;
  margin: 0px;
}

3.2. Порядок объявлений в CSS

Объявления свойств должны идти в алфавитном порядке

/* Правильно */
.selector-1 {
  background: #fff;
  border: #333 solid 1px;
  color: #333;
  display: block;
  height: 200px;
  margin: 5px;
  padding: 5px;
  width: 200px;
}

/* Неправильно */
.selector-1 {
  padding: 5px;
  height: 200px;
  background: #fff;
  margin: 5px;
  width: 200px;
  color: #333;
  border: #333 solid 1px;
  display: block;
}

3.3. Имена классов в CSS

Используйте только нижний регистр и вставляйте дефисы между словами

/* Правильно */
.nav-item { ... }

/* Неправильно */
.NavItem { ... }
.nav_item { ... }

Дефисы также необходимы для того, чтобы показать принадлежность одного селектора к другому. Префиксами можно подписывать селекторы родителей для удобного чтения кода.

/* Правильно */
.navbar { ... }
.nav { ... }
.nav-item { ... }
.nav-link { ... }

/* Неправильно */
.item-nav { ... }
.link-nav { ... }

Избегайте слишком коротких имён селекторов и всегда выбирайте пододящие по смыслу имена

/* Правильно */
.btn { ... }
.page-header { ... }
.progress-bar { ... }

/* Неправильно */
.s { ... }
.ph { ... }
.block { ... }

3.4. Производительность CSS

Никогда не используйте идентификаторы.

/* Правильно */
.header { ... }
.section { ... }

/* Неправильно */
#header { ... }
#section { ... }

Всегда отдавайте предпочтения классам, а не названиям тегов или другим стандартным селекторам

/* Правильно */
.form-control { ... }
.header { ... }
.section { ... }

/* Неправильно */
input[type="text"] { ... }
header
section

Избегайте гнездящихся элементов, используйте вместо них отдельные классы

/* Правильно */
.navbar { ... }
.nav { ... }
.nav-item { ... }
.nav-link { ... }

/* Неправильно */
.navbar ul { ... }
.navbar ul li { ... }
.navbar ul li a { ... }

Используйте гнездящиеся элементы только когда нужно поменять свойства класса в зависимости от его вложенности в другие классы. Не используйте гнёзда с вложенностью более трёх селекторов

/* Правильно */
.modal-footer .btn { ... }
.progress.active .progress-bar { ... }

/* Неправильно */
.modal-btn { ... }
.progress.active .progress-bar .progress-item span { ... }

Сокращайте CSS-код. Таск-менеджеры, такие как Grunt упрощают это.

/* Правильно */
.navbar { ... }.nav { ... }.nav-item { ... }.nav-link { ... }

/* Неправильно */
.nav-item {
  ...
}
.nav-link {
  ...
}

3.5 Адаптивность и @media-запросы

Начинайте разработку части кода с введения основных правил и @media-запросов для этой части.

/* Правильно */
.navbar {
  margin-bottom: 20px;
}

@media (min-width: 480px) {
  .navbar {
    padding: 10px;
  }
}

@media (min-width: 768px) {
  .navbar {
    position: absolute;
    top: 0;
    left: 0;
  }
}

@media (min-width: 992px) {
  .navbar {
    position: fixed;
  }
}

/* Неправильно */
.navbar {
  position: fixed;
  top: 0;
  left: 0;
}

@media (max-width: 767px) {
  .navbar {
    position: static;
    padding: 10px;
  }
}

Держите @media-запросы как можно ближе к тому правилу, к которому они относятся. Не выделяйте их в отдельную таблицу стилей или в конец документа

.navbar { ... }
.nav { ... }
.nav-item { ... }

@media (min-width: 480px) {
  .navbar { ... }
  .nav { ... }
  .nav-item { ... }
}

3.6. Препроцессоры

Во всех своих проектах я (автор) использую LESS.

Осторожнее с гнездящимися элементами. Лучше просто продолжайте обходиться без них.

/* Правильно */
.nav-item { ... }

/* Неправильно */
.navbar {
  .nav {
    .nav-item {
      ...
    }
  }
}

Имена переменных должны быть семантическими.

/* Правильно */
@brand-primary: #049cdb;

/* Неправильно */
@color-blue: #049cdb;

3.7. Комментарии в CSS

Все комментарии должны быть написаны в синтаксисе используемого препроцессора

//
// Раздел
// --------------------------------------------------

// Подраздел
// --------------------------------------------------

//
// Блок комментариев
//
//

// Простой комментарий

4. Javascript

Основой этой части документа стали: "idiomatic.js" и "Zeno Rocha Coding Style".

Оглавление Javascript

  1. [Синтаксис Javascript] (#js-syntax)
  2. [Переменные Javascript] (#js-variables)
  3. [Производительность Javascript-кода] (#js-performance)
  4. [Комментарии в Javascript] (#js-comments)

4.1. Синтаксис Javascript

Используйте мягкую табуляцию размером в два символа пробела. Это настраивается в редакторе кода.

// Правильно
while (condition) {
  statements
}

// Неправильно
while (condition) {
    statements
}

Всегда прописывайте точку с запятой в конце строки.

// Правильно
var me = $(this);
test();

// Неправильно
var me = $(this)
test()

Всегда используйте одинарные кавычки

// Правильно
var string = '<p class="foo">Lorem Ipsum</p>';
var noteClick = me.attr('data-note');

// Неправильно
var string = "<p class='foo'>Lorem Ipsum</p>";
var noteClick = me.attr("data-note");

Пишите else на той же линии, что и закрывающая фигурная скобка блока инструкций выражения if.

// Правильно
if ( true ) {
  ...
} else {
  ...
}

// Неправильно
if ( true ) {
  ...
}
else {
  ...
}

Добавляйте пробелы между операторами.

// Правильно
for (i = 0; i < 10; i++) {
  ...
}

// Неправильно
for (i=0;i<10;i++) {
  ...
}

Никогда не добавляйте пробелов после названия функции и перед её первым аргументом.

// Правильно
foo(function() {
  ...
});

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

Добавляйте пробелы за пределами круглых скобок, но избегайте пробелов внутри.

// Правильно
if (condition) {
  statement
}

// Неправильно
if( condition ){
  statement
}

Для условных операторов if/else/else if всегда использовать фигурные скобки {}.

// Правильно
if (condition) {
  statement
} else if (condition) {
  statement
} else {
  statement
}

// Неправильно
if (condition) statement;
else if (condition) statement;
else statement;

Проверка значений на равенство чаще всего должна быть строгой (===), нестрогую (==) использовать только в крайних случаях.

// Правильно
if (foo === 'foo') {
  statement
}

// Неправильно
if (foo == 'foo') {
  statement
}

4.2. Переменные Javascript

Все переменные перед использованием должны быть объявлены.

// Правильно
var me = $(this);
var noteClick = me.attr('data-note');
notes[noteClick].play();

// Неправильно
notes[noteClick].play();
var me = $(this);
var noteClick = me.attr('data-note');

Всегда используйте var для объявления переменных.

// Правильно
var me = $(this);

// Неправильно
me = $(this);

4.3. Производительность Javascript-кода

Используйте JSHint для выявления ошибок и проблем кода.

Всегда сокращайте и конкатенируйте весь Javascipt-код. Таск-менеджеры, такие как Grunt упрощают этот процесс.

4.4. Комментарии Javascript

Комментарий должен идти одной строкой над строкой комментируемого кода

// Правильно
// Пример хорошего комментария
var me = $(this);

// Неправильно
var me = $(this); // Пример плохого комментария

5. Ссылки

6. Переводы

7. Лицензия

MIT License © Luiz Felipe Tartarotti Fialho

About

Перевод стиля кода от LFeh на русский язык