Как композиция без точки сделает вас лучшим функциональным программистом

kak kompozicziya bez tochki sdelaet vas luchshim funkczionalnym programmistom

Откройте для себя функциональный JavaScript был назван одним из лучшие новые книги по функциональному программированию от BookAuthority!

«Стиль без точек – направлен на уменьшение визуального беспорядка, удаляя ненужное сопоставление параметров и аргументов». — Кайл Симпсон в Functional-Light JavaScript

Рассмотрим текущий код:

let newBooks = books.filter(point => isTechnology(point))

Теперь посмотрите на тот же код после устранения пунктов (параметров/аргументов):

let newBooks = books.filter(isTechnology)

Без точки в операциях со списком

Выполним операции со списком в стиле без точек.

Скажем, нам нужно найти названия технологий в списке книг, подготовить объект книги со всей информацией для просмотра и отсортировать книги по имени автора.

Вот как будет выглядеть код:

function getBooks(){
  return books.filter(isTechnology)
              .map(toBookView)
              .sort(ascByAuthor);
}

//Small functions with points
function isTechnology(book){
   return book.type === "T";
}

function toBookView(book){
  return Object.freeze({
    title : book.title,
    author : authors[book.authorID].name
  });
}
  
function ascByAuthor(book1, book2){
  if(book1.author < book2.author) return -1;
  if(book1.author > book2.author) return 1;
  return 0;
}

Обратные звонки isTechnology(), toBookView(), ascByAuthor() это небольшие функции с именами, раскрывающими намерения. Они не построены в бесточном стиле.

Код, собирающий все эти функции getBooks() является бесточечным.

Расписание и состав

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

Мы разбиваем большую задачу на несколько функций, выполняя меньшие задачи. Затем мы снова объединяем эти функции, чтобы решить начальную задачу.

Давайте еще раз прочтем требования:

Нам нужно найти названия технологий в списке книг, подготовить объект книги со всей информацией для просмотра и отсортировать книги по имени автора.

Мы создали:

  • isTechnology() предикат, чтобы проверить, это техническая книга
  • toViewBook() чтобы построить объект со всей информацией для просмотра
  • ascByAuthorname() отсортировать две книги по возрастанию имени автора
  • getBooks() чтобы объединить все эти небольшие функции вместе в бесточном стиле
function getBooks(){
  return books.filter(isTechnology)
              .map(toBookView)
              .sort(ascByAuthor);
}

Шаги к композиции без точки

Нет дополнительного анонимного обратного вызова при выполнении композиции без точки. Нет function ключевое слово, без синтаксиса стрелки =&gt; . Все что мы видим, это имена функций.

  • В большинстве случаев извлекайте обратные вызовы в именуемых функциях.
  • В простых случаях просто используйте вспомогательную функцию с панели инструментов для создания обратного вызова на лету. Посмотри на prop() функция, например.
  • Укажите функцию координатора в стиле без точек.

Малые функции

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

Будет два вида функций:

  • Функции, выполняющие одну задачу: они чистые или замыкающие функции. Обычно они построены не в бесточном стиле, а имеют хорошие названия.
  • Функции, координирующие многие задачи: объединение этих небольших задач в стиле без точки облегчает чтение.

Не все бесточно

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

Откройте для себя функциональный JavaScript был назван одним из лучшие новые книги по функциональному программированию от BookAuthority!

Чтобы узнать больше о применении методов функционального программирования в React, посмотрите Функциональный React.

Учитесь функциональный Reactна основе проекта, с Функциональная архитектура с React и Redux.

Подписывайтесь на Twitter

Добавить комментарий

Ваш адрес email не будет опубликован.