Каков наилучший способ преобразования классов ООП в функции FP? - PullRequest
0 голосов
/ 02 мая 2019

Я нашел хранилище GitHub, полное алгоритмов JavaScript и типов данных.Дело в том, что все написано в ООП.Я сам предпочитаю более FP подход с использованием небольших, многократно используемых функций.Каковы некоторые рекомендации по преобразованию классов в более мелкие расходуемые функции?

А сейчас я могу привести следующий рабочий пример.Это путь?

ООП:

class LinkedListNode {
  constructor(value, next = null) {
    this.value = value;
    this.next = next;
  }

  toString(callback) {
    return callback ? callback(this.value) : `${this.value}`;
  }
}

FP:

function toString(value, callback) {
  return callback ? callback(value) : `${value}`;
}

function Node(value, next = null) {
  return {
    value,
    next,
    toString(callback) {
      return toString(value, callback);
    }
  };
}

1 Ответ

1 голос
/ 14 мая 2019

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

Чтобы со стороны было ясно, что это не функция конструктора, начните с нижнего регистра и добавьте префикс, например, например, create.

Сделать функции максимально чистыми и не смешивать логику композиции кода (составлять, карри) с бизнес-логикой.(Я говорю о обратном вызове, не имеющем ничего общего с toString)

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

export { nodeToString, createNode };

function nodeToString(node) {
  return `${node.value}`;
}

function createNode(value, next = null) {
  return {
    value,
    next
  };
}

Это будет использоваться следующим образом

import { nodeToString, createNode } from "./x.js";

const node = createNode(`myvalue`);
const string = nodeToString(node);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...