«Чистый код» Роберта Мартина

Эту книгу я читал два года назад. Но единственное, что помню из неё, что мне не понравился перевод. Поэтому в этот раз я решил прочесть её в оригинале и заодно собрать годные мысли в заметках. Сегодня рассмотрим первые 4 главы.

Глава 1. Чистый код

В первой главе автор даёт определение чистому коду. Если собрать все описания в один список, то чистый код:

  • элегантный и производительный;
  • простой и недвусмысленный;
  • читаемый и поддерживаемый;
  • тестируемый и с минимально необходимым АПИ.

Глава 2. Названия

Коротко:

  • названия должны быть понятными и последовательными;
  • в них не должно быть двусмысленности;
  • аббревиатуры в названиях — плохо.

Используйте названия, объясняющие, что вы хотите сделать.

// плохо
let d; // elapsed time in days

// хорошо
let elapsedTimeInDays;

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

Используйте произносимые имена. Аббревиатур следует избегать.

// плохо
let genymdhms;
class DtRec102 = { /* ... */ };

// хорошо
let generationTimestamp; 
class Customer = { /* ... */ };

Переменная с хорошим названием быстро считывается и легко ищется. Использовать i, j, k стоит только для счётчиков. Названия функций и методов должны быть глаголами или начинаться с них. Геттеры, сеттеры и предикаты лучше называть с префиксами: get, set, is, has и т. д.

Прим. автора поста: думаю, в конвертирующих функциях глагол можно опустить: convertIntToStr intToStr.

Используйте одно и то же слово для одного и того же понятия. Если в разных классах схожие методы называются по разному: fetch, get, load — то трудно запомнить, когда какой вызывать.

Глава 3. Функции

Коротко:

  • короткие функции лучше громоздких;
  • чем меньше аргументов, тем лучше;
  • флаги лучше заменять на объект с настройками.

Функции не должны быть большими. Лучший размер для функции — 2–3 строки. (Прим. автора поста: про размер — спорно.) Каждая функция должна выполнять только одно действие. Но будьте аккуратнее с определением того, что такое «одно действие». Какие‑то части можно вынести в отдельные функции, умейте останавливаться в правильный момент.

Названия должны полно описывать, что функции делают. Они должны быть консистентными, и недвусмысленными.

Больше, чем 3 аргумента использовать не стоит. Флаги лучше заменить на объект с настройками.

// плохо
const initPopup = (
  node, 
  closeOnEsc=false, 
  closeWithAnimation=false
) => { 
  /* ... */ 
}

// хорошо
const initPopup = (node, options={}) => {
  const {
    closeOnEsc=false, 
    closeWithAnimation=false
  } = options
  /* ... */
}

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

Глава 4. Комментарии

Коротко:

  • комментарий не должен дублировать код;
  • и должен сообщать дополнительные сведения, которых нет в коде.

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

// плохо
// if the employee is eligible for full benefits 
if ((employee.flags.includes(HOURLY_FLAG)) && (employee.age > 65)) { /* ... */ }

// хорошо
if (employee.isEligibleForFullBenefits()) { /* ... */ }

В комментариях лучше объяснить, каким образом вы пришли к какому‑либо решению. Они должны рассказать то, чего не будет знать человек, который будет работать с вашим кодом. Также стоит в комментариях предупредить об известных проблемах с этой частью кода.

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

В следующий раз

В главах 5–8 обсудим:

  • форматирование, зачем оно нужно;
  • структуры данных, абстракции;
  • обработку ошибок и исключения.

Ссылки №14

Сегодня советую посмотреть:

Калининград и область, август — сентябрь 2017

Калининград — это город зелени и пробок. Уфу называют зелёной, но в Калининграде намного больше парков и деревьев на улицах.

Парки в Калининграде — 1
Парки в Калининграде — 2

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

В городе есть приятные места. Например, парк около Верхнего озера ничего. Видимо, из‑за большого количества парков, здесь бегает больше людей, чем в Уфе.

Рядом с Верхним охером — 1
Рядом с Верхним озером — 2

Большая часть новых домов огорожена глухими заборами. Часто в таких местах ещё внезапно заканчивается тротуар.

Повсюду заборы

С достопримечательностями — беда. Многие выглядят неказисто на фоне серых многоэтажэк. Королевские ворота:

Королевские ворота на фоне многоэтажки

Бранденбургские ворота — просто часть дороги. К ним ни подойти, ни сфотографировать.

Бранденбургские ворота

Фотографировать здесь вообще довольно неудобно. Нормальный ракурс либо чем‑то закрыт, либо в кадр залезает всякий мусор типа рекламы.

Визуальный мусор рядом с достопримечательностями

Но если постараться, можно что‑то выхватить

Можно сделать красивые фотографии — 1
Можно сделать красивые фотографии — 2
Можно сделать красивые фотографии — 3

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

Разбитая набережная

Рыбная деревня. Пародия на европейскую застройку. Жалко, могло получиться круто.

Рыбная деревня — 1
Рыбная деревня — 2

Старые здания на контрасте с ней выглядят куда круче:

Старые здания — 1
Старые здания — 2

Прелесть:

Домик

Будьте готовы, что к половине зданий никак не подойти, потому что они огорожены заборами.

Часто не пройти — 1
Часто не пройти — 2

От Калининграда до моря от получаса до часа езды на электричке. Вот Зеленоградск. Тут песчаный пляж и куча народу.

Зеленоградск — 1
Зеленоградск — 2
Зеленоградск — 3

А вот Светлогорск. Тут поменьше людей, и канатная дорога.

Светлогорск — 1
Светлогорск — 2
Светлогорск — 3

Ссылки №13

Сегодня совсем без ютубов:

Раньше ↓