Skip to content

FP good style for JavaScript #1

Open
@tshemsedinov

Description

@tshemsedinov

Вы знаете, что через мои лекции и митапы за год проходит более тысячи студентов и вольных слушателей, а это значит, что все они будут впитывать тот стиль, который видят в примерах кода. А стиль очень важен и я понимаю степень ответственности. Уйма книг и примеров имеют плохой стиль и я не могу ссылаться на них в процессе обучения, поэтому создана эта организация, в которой сейчас уже есть 67 репозиториев с примерами кода по разным темам и я расширю их до порядка нескольких сотен и буду постоянно поддерживать.

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

Большое спасибо Алексею @mr-mig, Эльдару @edjafarov, Ингвару @RReverser, Алексею @agil и Никите @galkin за критический подход и советы. Надеюсь на вашу поддержку в этом деле и прошу делать issue или RP в случае выявления проблем в примерах кода. Если хотите, я буду уведомлять о тех кусках концептуального кода, которые требуют обсуждения, нажмите 👍 если так.

Какую я ставлю перед собой задачу именно в этом репозитории:

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

Сразу отвечу на несколько вопросов:

  1. @mr-mig и @edjafarov, я согласен по поводу именования, и улучшу его еще в ближайшее время
  2. @agil про порядок compose ты прав, но тут удобно писать в прямом порядке, это нагляднее, я не так хорошо знаком с библиотеками фп и не видел где обратный compose называется pipe, если ты имеешь ссылку или уверен, что это общепринятое название, то я заменю
  3. @RReverser, я понимаю, что смешивать разные уровни абстракции в одном коде это смертный грех, но примеры должны быть краткими, компактными и иллюстративными, поэтому я помещаю их в один файл, группирую в блоки и даю пояснения во время лекции, что эти фрагменты вообще должны быть в разных файлах
  4. Промисы и async/await я тут не использую по двум причинам:
  • это учебный код и перегружать его концепциями нельзя, при этом я согласен, что не должно быть бессмысленного учебного кода, но все же, есть своя специфика, сначала студент осваивает один прием, потом другой, а потом объединяет их (как, например, ФП + асинхронное программирование), а сразу их съесть за один раз сложно
  • промисам я предпочитаю функции асинхронной композиции, которые и работают быстрее и совместимы с контрактами callback-last / error-first, см. metasync и мои доклады по этой теме
  1. Конечно нужно рассмотреть это в разрезе DSL языка, но я еще не успел написать примеры, которые продемонстрируют этот аспект, скоро.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions