Ruby 最重要的是什么';纯';面向对象语言?
最近对Smalltalk的介绍启发了我“纯”面向对象风格的应用和好处。我以前在Ruby中看到过这一点的好处,尽管存在着非面向对象的Ruby 最重要的是什么';纯';面向对象语言?,ruby,oop,block,smalltalk,Ruby,Oop,Block,Smalltalk,最近对Smalltalk的介绍启发了我“纯”面向对象风格的应用和好处。我以前在Ruby中看到过这一点的好处,尽管存在着非面向对象的if,excel等构造,但它似乎并没有将所有东西都进行到底 在这里,我所说的纯粹是“一切都是对象”(包括通过块或类似的函数)和没有过程风格的流控制,而是在布尔和集合上使用流控制方法 然而,即使在像Smalltalk这样的语言中,有些东西也不是面向对象的。例如,如果不使用特殊语法(:=而不是'is:'或类似的方法),并且从函数返回值似乎需要^operator,而它似乎不
if
,excel
等构造,但它似乎并没有将所有东西都进行到底
在这里,我所说的纯粹是“一切都是对象”(包括通过块或类似的函数)和没有过程风格的流控制,而是在布尔和集合上使用流控制方法
然而,即使在像Smalltalk这样的语言中,有些东西也不是面向对象的。例如,如果不使用特殊语法(:=而不是'is:'或类似的方法),并且从函数返回值似乎需要^operator,而它似乎不属于任何对象
有哪种语言更能体现这种风格呢?埃菲尔、Smalltalk和Ruby
作为一名长期的小人,我(与这里的许多其他答案相比)理解你的目标——而“自我”语言确实更进一步,至少在作业方面是这样。没有在self中编程,除此之外,我无法对其进行进一步的评论。另一种与self类似的较新语言是Slate,也是原型语言,也使用消息发送来分配任务。纯净的好处是什么?纯度使Haskell的学习曲线明显高于其他函数式语言,因为从过程的角度来看,单子很难理解。@Chris:是的,但是一旦你掌握了单子,它就非常棒了。另一方面,这个问题似乎把纯洁的东西带得有点远。。。当然,您可以删除返回值,而不是要求通过对象状态进行这种通信(调用一个不会产生任何结果的方法,然后使用
self.result
),但这是我们程序员通常试图使所有内容的范围尽可能小的原因。另外,它将打破方法链接,因为并没有返回值,除非您定义某个对象属性为该值,但随后我们又回到了魔术。我完全认识到,这方面的纯粹性可能会使事情变得非常冗长,并且可能无法执行,但对于一种拥有非常小且一致的规则集的语言来说,这也有很大的好处。也就是说,我很想找到一种将事情推向极端的语言,即使只是为了一个好事情太多的好例子。你为什么认为if语句是“非面向对象的”?您需要if语句,它与面向对象无关。您确实需要流控制,但过程if语句不是实现这一点的唯一方法。例如,在Smalltalk中,您可以改为执行:条件ifTrue:[//true block]ifFalse:[//false block],其中条件是布尔对象。Ruby比Smalltalk更具混合性(例如,它具有call/cc
等功能特性)。请阅读这个问题。这个链接实际上是一个很好的资源。十年前它是一个很好的资源。Java大约从2003年起就有泛型。@delnan:call/cc
在任何直接公开调用堆栈的环境中都是不必要的,就像Squeak和Pharo所做的那样。不管怎样,call/cc
是个坏主意:请继续部分。