很多人在写一个类时会写出这样的代码:
class Person {
talk (name, msg) {
this._initName(name)
this.msg = msg
this._send()
}
_initName (name) {
this.name += ': '
}
_send () {
console.log(this.name + this.msg)
}
}
我认为更好的写法是这样:
class Person {
talk (name, msg) {
this.name = this._initName(name)
this._send(this.name, msg)
}
_initName (name) {
return name += ': '
}
_send (name, msg) {
console.log(name + msg)
}
}
在实现了同样的功能的同时,下面的代码有以下几个优点:
纯函数的特点是没有副作用,如果在该类的其他地方仍需复用这个逻辑,可以直接使用,比如
const anotherName = this._initName(anotherName)
而原来的 initName(name)
因为和 this.name
绑定,无法很好的复用。
阅读代码 1 时,当看到 talk
的代码时很难看出来 this.initName(name)
和 this.send()
到底在做什么,代码 2 比代码 1 多传递了以下信息:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.