Предположим, у вас есть бизнес-требование, которое требует от вас

  • Возьмите список предметов domainList
  • Преобразуйте их в URL-адреса с HTTPS протоколом
  • Добавить конкретный параметр в запрос callback=false

Приведенный ниже код решает проблему.

Но спросите себя, как кто-то новичок в этом фрагменте кода поймет бизнес-логику?

  • Почему мы добавили HTTPS протокол?
  • Почему мы добавили callback=false?

Мы могли бы решить эту проблему, добавив комментарии.

Теперь это имеет больше смысла.

Но перенесемся на пару недель, и логику нужно обновить!

Оказывается, HTTPS нужно добавлять только к действующим доменам (valid: true). Давайте внесем и это изменение.

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

Решение?

Разделите логику на несколько функций, которые в идеале делают только одно.

//TODO: упоминает, что addCallbackParameter является временным и его необходимо удалить в будущем. Однако внести это изменение будет чисто и просто.

Вам не кажется, что код более читабелен, а бизнес-логика достаточно интуитивно понятна? Тестирование будет проще, поскольку любое обновление логики будет иметь локализованное изменение кода, поскольку все функции делают только одно.

Код более аккуратный, но все конкурентоспособные программисты сходят с ума от .map, когда их вызывают дважды. Честно говоря, повторный вызов не имеет значения, если только количество пунктов не велико. Вы бы даже заметили / заметили задержку, если бы позвонили .map 10 раз всего по 20 вопросам? Писать запутанный код, гарантирующий, что вы используете один цикл, не стоит.

Однако мы также можем решить эту проблему, используя служебную функцию pipe из библиотеки Ramda. Фактически, вы можете написать свою собственную функцию канала, это довольно просто.

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

  • Теперь, если разработчик должен добавить еще один параметр с именем redirect_url=https://www.some-endpoint.com, а URL-адрес предоставляется config.

Представьте себе разговор, который вел бы разработчик

«В настоящее время мы генерируем URL-адрес, а затем добавляем параметр обратного вызова, нужно ли нам добавить еще один? Стоит ли мне сохранить существующий? Нужно ли будет обновить существующий параметр? »

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

Примечание. В статье применяются концепции функционального программирования для улучшения читабельности кода, и в ней недостаточно подробностей, чтобы объяснить концепции FP.