javascript - 将 OOP 类转换为 FP 函数的最佳方法是什么?
问题描述
我找到了一个充满 JavaScript 算法和数据类型的 GitHub 存储库。问题是,一切都是用 OOP 编写的。我自己更喜欢使用小型可重用函数的更多 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);
}
};
}
解决方案
在您的第二个示例中,您仍然有一个附加到每个实例的方法,如果您想在兼容的接口上重用此方法,这并不理想。它也不能很好地与许多 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);
推荐阅读
- django - 在 Django 中使用替代模型进行密码重置
- mysql - 以百分比为单位获取年月数据
- blueprism - 多个虚拟工作者可以共享同一个集合吗?(蓝棱镜)
- python - 弄清楚除了 ValueError
- python - best_local_affine_kernel.cu [WinError 126] 在 Windows 10 上找不到指定的模块
- list - 如何仅获取与 Elastic Search 列表中匹配的元素值?
- firebase - 当联系表单提交到 Firestore 时,Firebase 云功能使用 sendgrid 发送电子邮件
- javascript - 有没有办法在重定向到其他网址之前让网址做出反应?
- php - 如何将用户重定向到 CakePHP 中的特定页面
- reactjs - 使用 Reactjs 从列表中添加和删除类