调用setter或过程时是否应返回对象本身以支持函数链式调用?
setter返回自身实现链式调用是否比返回
void更优? 我一直好奇,是否应当从原本返回
void的setter或过程中返回对象本身,以此实现所有函数的链式调用。
我们一直被教导当没有内容需要返回时就返回void,但返回对象本身是否比返回void更优?
这个问题没有绝对的最优答案,完全取决于你的使用场景和团队的编码规范约定:
优先选择返回对象本身的场景
- 你需要大量对同一个对象做连续属性修改,链式调用能大幅简化代码:
传统void返回值的写法需要分多行写:
链式调用可以合并为一行,代码更紧凑可读性更高:user.setName("张三"); user.setAge(20); user.setGender("男");
很多成熟的开源库(比如Java的user.setName("张三").setAge(20).setGender("男");StringBuilder、前端的jQuery)都采用了这种设计,工业界接受度很高。 - 没有额外性能损耗:返回对象本身只是返回一个引用,不管是哪种编程语言,这个操作的开销都可以忽略不计,不会对性能造成负面影响。
优先选择返回void的场景
- 团队严格遵循*命令查询职责分离(CQRS)*规范:按照该原则,修改对象状态的「命令类方法」不应该返回任何业务状态,返回对象会模糊命令和查询方法的边界,不符合规范约定。
- 方法需要做签名适配:比如你的setter需要作为函数指针传入其他工具方法,返回
void和返回对象的方法签名不兼容,这种场景下只能遵循原有约定返回void。 - setter本身需要返回执行状态:如果你的setter逻辑可能出现设置失败的情况,需要返回布尔值或者错误码告知调用方,那返回对象本身的方案也不适用。
总的来说,只要没有明确的规范约束或者业务冲突,返回对象本身实现链式调用的收益远高于返回void,完全可以在项目中推广使用。
内容的提问来源于stack exchange,提问作者user15459834
相关产品推荐
相关产品推荐

