论坛首页 编程语言技术论坛

我喜欢Ruby的原因

浏览 68535 次
精华帖 (0) :: 良好帖 (12) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2008-04-23  
mcpssx 写道
gigix 写道
rubynroll 写道
有些东西是无法通过封装几个方法或库来替换的,比如closure, Java是无论如何也封装不出来的。

当然可以封装出来咯,匿名内部类嘛,Ruby一句话的事情写10行嘛。
不是每天写代码的人,或者每天写代码却从不动脑子去想的人,说起这些事情来总是轻描淡写的


单看这一点是没多大意义的,按这样的说法,
那C++更强大啊,C语言都可以支持函数指针了,delphi还支持方法函数指针呢,
那真么java更流行了呢?
都是要综合比较的,

比如java的重构就比ruby强大多少倍吧?
java的函数库比ruby多吧?

java不是不能支持closure的,而是因为内部有争议所以迟迟没有上马!其实就是写一个内部类也就多一行类定义代码吧






你如果了解javascript的closure,就应该知道除了类似函数指针的功能,还有共享变量空间的优点。
java在一些应用领域比C语言更流行,不是(如果是,也绝不是主要原因)因为它抛弃了函数指针,"都是要综合比较的",所以,你的暗示太误导人了。

说到重构,不同语言写成的代码有不同的重构需求和重构模式,gigix翻译的那本关于重构的经典书,主要以java程序作为研究对象。像abstract interface这些东西,对于动态语言就是另外一种套路。而且,以我们对自己rails工程做过的几轮重构发现,ruby程序由于其简洁性,大大降低了将来需要重构的压力和规模,在重构过程中不依赖工具或依赖全工程查找等简单手段,其重构效率、准确性和最终效果都令人满意。

没有真正用ruby开发的人,会抱怨说ruby在一个问题上有多个答案。而真正用会发现,用ruby哲学去思考一个具体问题时,往往会清晰的直奔最佳方案。反倒是java,会有很多可选方案,不止复杂,而且在实现上互相迁移的成本不小。很多时候java重构,就是从一个方案切换到另个方案。重构,为的是在满足需求和保证必要的可扩展性的前提下,提高代码质量(消除坏味道代码)。在现实工程里,重复代码几乎就是坏味道代码的同义词。你想想java代码造成重复的可能性,比较比较ruby代码的可能性,就应该清楚谁对重构更有利了。

我看到你后面的贴子举了java7的例子,如果用java5定义内部类的方式实现同样功能,请你贴出代码,我们再看看是不是只多了一行类定义代码。

工作比较忙,后面的贴有空再回。
0 请登录后投票
   发表时间:2008-04-23  
对于Java实现closure的问题,我实在是不专业,本人不是搞java的,因此见笑了...不过closure不仅仅是deligate的问题,closure还要携带binding环境的,例如:
a = 5
10.times { a += 1 }
在这里,closure里面可以访问a, 不知道匿名类可以么?

至于java 7,那是另外个问题,也正说明通过“封装”不好解决问题,所以引入新的语法嘛。
0 请登录后投票
   发表时间:2008-04-23  
我很烦在讨论一个东西的时候,对方对此没有概念。
看来又陷到这种境地了。我不喜欢说服一个没有了解的人去喜欢什么,我喜欢自由。我觉得不像讨论。
mcpssx,关于closure,请你仔细看看rubynroll写的那段示例代码,这个binding,不是指self/this。你玩过javascript吗?那里面也有。
java用匿名类实现,直接修改binding里的对象不那么直接,有final问题。这个用过的人帮忙解释一下吧。

关于procedure的传递时同时携带self/this,有些语言没有做到。AS3相比AS2做到了这一点,它都自认为是它很重要的特点。

至于closure有多大意义,是不是重点,JGL,common collection,STL,评估一个语言的角度,等等,等我们今天code freeze后我再参与讨论,干活去了。

0 请登录后投票
   发表时间:2008-04-23  
对于我来说,我喜欢Ruby的原因,正是因为有closure和open class的能力:
http://rubynroll.iteye.com/admin/blogs/148310
0 请登录后投票
   发表时间:2008-04-23  
从评论ruby到具体的closure,是因为gigix举了一个例子。这只是一个点。
我想问mcpssx,你用没用过closure? 揣测和真正来用是两码事。

引用
1,我只是指出匿名类类似于闭包的效果,并没有说形式上一模一样。
类是携带了过程的数据,闭包就是携带了数据的过程,无非是重点有所区别而已。



我前面提过,《Advanced Rails》第二章也提到如何比较编程语言。大致是说不应该在他们的原始能力上进行比较,因为从理论上任一图灵完备的语言都能满足该要求。所以,你跟我讲类、过程、数据的关系,如同讲所有的代码最始都无非是转成了机器码来跑一样。
性能方面对于多数应用程序而言也不是关键。
而开发效率是至关重要的,即把程序员的想法准确转换成实现代码的速度。同时与之紧密相连的是维护效率。Perl常被人批评为“只写”的,通常有较高的开发效率,却以较低的维护效率作为代价。而Ruby在这两方面都不错。

程序代码首先是写给人看的,顺便让机器运行。所以在编程语言的发展方向和主要差异上,是如何让人表达他的意图,而不是如何表达计算机的实现方式。

另外,《Advanced Rails》第一章也指出,在Ruby视角中的设计模式,一部份因为极为简单透明化,不宜称为模式,而是一种惯用法,或称Ruby思考方式。因此Ruby设计模式跟C++设计模式有很大区别。

引用
2,闭包的意义多大看一点就清楚了,那就是php就没有闭包,
我看不出有证据显示出rails的开发速度快于php,也看出不出这对web开发有什么重要意义。


Web开发中,闭包的影响力可能没那么大。我不懂php,想问问没有闭包的php是怎么处理数据库连接的打开关闭的。
闭包的威力更多表现在逻辑处理和框架级上。我们的逻辑代码就大量(很自然的)用了它。没有它会是灾难。

引用
而且groovy也有闭包,也有open class啊


所以groovy在编程语言排名中也在缓慢的往上爬啊。groovy的问题,是它的核心开发团队的问题,不是语法方面的问题。
0 请登录后投票
   发表时间:2008-04-23  
1. 就算匿名类可以实现类似闭包的效果,就像gigix说的,10行代码和1行代码的区别. 而且这一行是优雅自然的代码. 这就是一个巨大的进步.

2. 更没有证据显示php开发速度快是因为没有闭包, 所以你等于没说....
我也不知道闭包对web开发有什么重要意义....不过我觉得闭包使得语言表达更自然, 类似: 10.times { puts "hello" } 这样简洁自然的表达方式就有闭包的功劳.

"而且groovy也有闭包,也有open class啊"
嗯, 我不了解groovy, no comment。

这一帖真有趣, 支持ruby的人都是以实际代码,语言特性说明或亲历的项目经验作为证据来说明ruby的优点, 而对ruby持怀疑者, 多半以猜测, 臆断, 初尝即止的经验为基础, 或干脆顾左右而言它。

0 请登录后投票
   发表时间:2008-04-23  
rubynroll 写道
1. 就算匿名类可以实现类似闭包的效果,就像gigix说的,10行代码和1行代码的区别. 而且这一行是优雅自然的代码. 这就是一个巨大的进步.



为了对前面的讨论有个交待,mcpssx须给出用java5怎么实现那个功能。是不是多一行类定义就能搞定,用JGL、common collection都行。
0 请登录后投票
   发表时间:2008-04-23  
rubynroll 写道

这一帖真有趣, 支持ruby的人都是以实际代码,语言特性说明或亲历的项目经验作为证据来说明ruby的优点, 而对ruby持怀疑者, 多半以猜测, 臆断, 初尝即止的经验为基础, 或干脆顾左右而言它。


不止这样,还倾向于拿别人(java)不靠谱的未来跟ruby的现在甚至过去进行比较。
0 请登录后投票
   发表时间:2008-04-23  
那个,就归入“顾左右而言它”了。
0 请登录后投票
   发表时间:2008-04-23  
引用
2,我以为重构大多时候是依靠工具的,而不是人在那里到处重构。否则这和以前人改程序有什么效率提高?


依靠工具改代码,用个像声词就是“稀里哗啦”一大片。重构Ruby程序,你还能想像发出稀里哗啦的声音吗?
可以想像的是劈里啪啦的完成功能

为什么会发出这种声音呢? 现在时髦的话是:你猜
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics