Go、Rust、Nim等新兴语言,为什么都抛弃了constructor?
Go、Rust、Nim等新兴语言,为什么都抛弃了constructor?
-----
网友解答:
-----
很多事物的发展都是螺旋上升的,从函数式到面向对象,再到可部分面向对象的函数式,即是回归,也是进步?虽然面向领域看起来很美,但难于落地,未来几年将是函数式的天下。个人更喜欢管道函数风格
-----
网友解答:
-----
个人认为,constructor是oop的糟粕之一。原因在于,constructor本质上是个静态方法,不是实例方法。所以constructor不能写在接口里面,也不能动态派发。你在哪里要调用constructor,必须直接写具体的那个constructor,这是个紧耦合。这也就意味着,你写单元测试,很难mock掉这部分。
这个问题看着不大,但是你仔细看看有多少技术就是专为解决这个问题而生的?首先,所有依赖注入框架都是为了解决这个赢耦合问题。说白了,用了依赖注入框架,你就基本上不用调用constructor了,换句话说,依赖注入框架就是为了消灭constructor而生的。
再看看设计模式。简单工厂、抽象工厂是在要实例化的对象上封装一层,这样你就不用直接调用constructor了。你constructor不是非实例方法吗?我把你包装一层,把你作为包装类的一个实例方法不就完了?然后工厂方法模式是把constructor改成了模板方法。单例模式、享元也是类似,基本上可以看作工厂模式的特例。然后原型模式,不包装,直接把constructor变成了一个实例方法:clone。你别调constructor了,直接clone就好。最后,建造者模式,仍然需要constructor,但是它就是用一个最简单的constructor,然后所有复杂的配置过程都是后面通过实例方法配置的。这样把大部分constructor的功能都交给实例方法了。
这就可以看出,constructor在实践中有多不少待见,基本上我们能不用就不用。所以,新的语言,还不如直接把它取消。一旦没有了constructor,你要构造新实例,那它自动就是工厂模式。但这并不是万能灵药哈。取消constructor也会带来自己的问题,最终还是要看程序员的灵活使用。
-----
网友解答:
-----
作为40岁的程序人员,绝对支持,就是面向对象搞的大家没有对象了,太卷了,综合回顾近20年来,核心编程技术除了张量运算外还有突破吗?不就是框架和碎片化的“突破”吗?成就了个体、伤害了集体,看看现在一个web前端要学多少技能?卷成啥样了,web汇编已成熟了,又回到二十年前的技能了,所以少用框架,多搞原理和积累自己的复用性才是王道。
-----
网友解答:
-----
不是放弃constructor,是放弃面向对象。特别是,放弃继承,转向组合。
用了函数式,再回到面向对象,会非常不适应的。
-----
网友解答:
-----
没有 构造器,就没有继承,就没有面向对象! 没有面向对象哪来的设计模式!说白了,面向对象起码比通过组合的方式要强很多!思想上!其次就是为啥没了,是因为面向对象对于入门者太难理解了! 所以小白愿意写go和python,说实话python也是面向对象,不过那语言简单也是写,复杂也是写!level不同!
------------------
推荐阅读:
过了50岁后,身体总是感觉到很乏累还隐隐的疼,这种痛苦谁能懂,为什么?