Хотя машины выполняют наш код, они не являются единственной или ключевой аудиторией, для которой мы пишем. Код, который мы создаем, должен легко расширяться и поддерживаться другими разработчиками. Являются ли эти разработчики другим-другим или просто вашим будущим я.

Я называю это мышление быть дружелюбным к человеку.

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

В этой статье мы рассмотрим четыре простых способа реализации этого подхода.


Ввести объясняющие переменные

Рассмотрите возможность введения переменных, чтобы избежать дублирования кода или сделать код более выразительным. В большинстве случаев нет необходимости беспокоиться о дополнительных битах памяти, которые они будут занимать.

function canEdit (user, document) {
  return (
    user.role === 'admin' ||
    user.role === 'editor' ||
    document.owner === user.id
  )
}

function betterCanEdit (user, document) {
  const isStaff = ['admin', 'editor'].includes(user.role)
  const isOwner = document.owner === user.id

  // The general idea is now expressed in a single statement ✅
  return isStaff || isOwner
}
Войти в полноэкранный режим

Выйти из полноэкранного режима


Сохраняйте согласованность имен

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

function verify (user) {
  return user.id > 0 &&
      user.name !== ''
}

function print (clients) {
  const data = clients.map(client => ({
    ...client,
    status: verify(client) // ❌ Clients suddenly turn into Users
  }))

  console.table(data)
}
Войти в полноэкранный режим

Выйти из полноэкранного режима


Избегайте неожиданного поведения

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


function shuffle (list) {
  return list.sort(() => Math.random() > 0.5) // ❌ Elements are sorted in-place
}

function betterShuffle (list) {
  return list
    .slice() // ✅ Make a shallow copy first
    .sort(() => Math.random() > 0.5)
}
Войти в полноэкранный режим

Выйти из полноэкранного режима


Используйте простые утверждения

Сделать код плотным и кратким может быть забавным упражнением. Хотя результат может выглядеть круто, для понимания другим потребуется больше времени и усилий.

const modules = {}

// ❌ We assign and return value in a single statement
function loadModule (name) {
  return modules[name] = modules[name] || loadModule(name)
}

// ✅ This code is straightforward and reads nicely from top to bottom
function betterLoadModule (name) {
  if (modules[name] === undefined) {
    modules[name] = loadModule(name)
  }
  return modules[name]
}
Войти в полноэкранный режим

Выйти из полноэкранного режима

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

Спасибо за ваше время 🦊
Требуемый объект