我发现了一个包含JavaScript算法和数据类型的GitHub存储库。问题是,所有的东西都是用OOP编写的。我个人更喜欢使用小的、可重用的函数的FP方法。将类转换为较小的可使用函数的一些最佳实践是什么?
现在,我可以给出下面的工作示例。这是要走的路吗?
OOP:
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);
}
};
}
发布于 2019-05-15 03:36:38
在您的第二个示例中,您仍然将一个方法附加到每个实例,这并不理想,因为您希望在兼容的接口上重用此方法。此外,它在很多FP js库中也不能很好地发挥作用。
要从外部清楚地表明它不是一个构造函数,请让它以小写开头,并添加一个前缀,例如create。
使函数尽可能纯净,不要将代码组合逻辑(compose,curry)与业务逻辑混合。(我说的是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);
https://stackoverflow.com/questions/55955248
复制相似问题