`
halfmile
  • 浏览: 12005 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

我喜欢Ruby的原因

阅读更多
刚看到“姜太公”说开始不喜欢Ruby,读了一遍帖子,觉得。。。青菜萝卜各有所爱吧。

本想跟贴讨论,但觉得那样的争论很无谓,毕竟代码说明问题

Java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test 
{
    public static void main(String[] args)
    {
        try {
            BufferedReader in = new BufferedReader(new FileReader("test.txt"));
            StringBuffer sb = new StringBuffer();
            String str;
            while ((str = in.readLine()) != null) 
              { sb.append(str + "\n"); }            
            in.close();
            String result = sb.toString();
            Pattern sentencePattern = Pattern.compile("(.*?\\.)\\s+?");
            Pattern javaPattern = Pattern.compile("Ruby");
            Matcher matcher = sentencePattern.matcher(result);
            while (matcher.find()) {
                String match = matcher.group();
                Matcher matcher2 = javaPattern.matcher(match);
                if (matcher2.find())
                    System.err.println(match);
            }
        } catch (IOException e) 
          {
            e.printStackTrace();
          }     
    }
}


Ruby
File.read('test.txt').scan(/.*?\. /).each { |s| puts s if s =~ /Ruby/ }


这个可能不怎么说明问题。在程序里面,经常会用到xml数据容器,那么

要表达:

  <node name="a">
      <node name="b">
          <node name="d"/>
          <node name="e"/>
      </node>
      <node name="c">
          <node name="f"/>
          <node name="g"/>
          <node name="h"/>
      </node>
  </node>


*在 Java 里*

Tree a = new Tree("a");

Tree b = new Tree("b");
Tree c = new Tree("c");
a.addChild(b);
a.addChild(c);

Tree d = new Tree("d");
Tree e = new Tree("e");
b.addChild(d);
b.addchild(e);

Tree f = new Tree("f");
Tree g = new Tree("g");
Tree h = new Tree("h");
c.addChild(f);
c.addChild(g);
c.addChild(h);


* 在 Ruby 里 *
tree = a {
            b { d e }
            c { f g h }
          }


这里例子都是搬来的,更多在http://www.rubyrailways.com/sometimes-less-is-more
分享到:
评论
110 楼 liusong1111 2008-04-24  
引用
我们以前写PHP的时候从不关心disconnection是否正常关闭的,现在系统用了5年啦,还在用,
disconnection相关的问题没碰到过。
数据库不是长连接,一般都是在<body>前放个connection(),在</body>后放个disconnection,
具体细节我不清楚啦,都3年不去搞PHP啦,即使是这样反反复复的connection()与disconnection,
系统性能还是很快的。

待讨论。

引用
JavaEye就是一个例子,robbin也发表过类似的关点(我以前看过他说的,但是他的论坛帖子太多啦,我一时找不到原话)
以前我们的PHP项目最大的代码行数有25万行,但是人也不多,最多时有5人,期间又抽掉两人,
其他PHP项目基本上我一个人完成,老总有时帮帮签合同,有时忙不过来啦,就写好安装文档找人照着步骤去不同地方安装。

我不知道你们公司的ruby/rails项目是怎么按排人员的?有超过5个人吗?


我们UI team有15人+,rails开发者超过10人。另外,我们QA team在之前没有ruby经验的情况下,都能够很快用ruby编写watir脚本了。看你的php项目和开发者数量,初步估计php比较费代码,估计开发过程中复制粘贴的情况较多,同时也是后期维护费力的一个原因。推导一下:复制粘贴是产生重复代码的主要根源,重复代码是坏味道的主要表现,去除坏味道是重构的主要目标,重构是增强易维护性的主要手段。很多情况复制粘贴并不是开发者内心想做的,而是由于语言、库、框架的限制,或者评估成本收益后最终选择复制粘贴(是什么因素造成权衡过后还要这样做呢?大可想想前面贴的使用java的JGL,为什么不是每个人都会选择用它呢?甚至大多数人不用它或不知道),或者根本无法做到通过封装等手段消除重复。这不是开发者素质的问题,而是既有底层工具的支持问题。

鼓励“个人英雄主义”的说法,一是因为用更少的人就能做成事情,二是做这种论断的人可能对将rails应用于大工程没有信心或体验。

引用
另外,要是同样开发一个web项目,我说开发速度、部署PHP快是纯粹凭个人经验的

你是与Rails做对比,而你连一个Demo都没跑过,我不客气的说,你没有资格下任何论断。

引用
PHP说难听点,搞来搞去就是数组,数据库编程,以前PHP也有OO,但从不去用的

如果侧重于表现层的生成,OO的那些东西确实用处有限。可对于后台逻辑复杂的情况呢?java最初在web领域的成功,不就因为asp在这方面的不足吗?而ruby的OO特性是java一时半会赶不上的。

引用
你要修改一个XXX.php文件,即使你把这个XXX.php文件改得跟原来是两个样啦,你要看结果,刷新浏览器就可以啦,
连apache都不用重启,写ruby/Rails你还要写写单元测试,我们20多万行的代码一个单元测试都没有,照样稳定运行,
就目前国内来看,中小型的web项目(特别是一些网站)还是PHP占大多数。

是的,rails也可以做到,只要不是开发plugin(没事谁写这东西啊)。写不写ruby/rails的单元测试,完全是可选的。我前面也发过贴了,不写测试代码的时候rails程序也跑得很稳定,代码质量也不低,写了之后就又上升一个档次 - 一个基于其它语言框架很难达到的质量水平。你这个论断有点离谱。

引用
但是就像我以前说的,PHP是出了名的难维护,以前要是3个月不看系统的代码啦,要在原来的地方增加什么新功能,
这时就很累,基本上又得把原来的代码看一次。

每一个项目后期的维护期都很长的,有时原先项目的主力走了,你就得接手他以前的系统,
这时你要去看他的PHP代码,那叫贼难受,即使你原先跟他在同一项目的,只是做着不同的部分,
维护起来也是累得要死。动态语言(变量通常不用指名类型)的代码普遍比静态类型的语言写出的代码难维护,
要是一个项目有很多人参与时,得先统一代码风格(比如变量的命名方式,数组的变量是否要加个a_前缀等等)。

好吧,你大概指php是"write-only"型的,开发快,维护难。但rails不是。你没有任何rails经验,只因他们同是动态语言,就认为这是一种共性。你重点是做底层研究,在应用层上需要多比较比较,别想当然了。如同评论java时,我去类比c(同是静态语言),然后断定java管理文件引用的关系是多么的麻烦。
至于具体的rails工程中的代码风格,如命名方式,都有普遍的惯用法,并不需再制订一套专有的,只要在团队中简单的分发达成共识即可。

引用
Rails也没成熟吧,不然我去年才买的书,一年不到就过时啦,
这就说明Rails很随性,在兼容性的问题方面考虑得不周到。

Rails2.0加强了很多特性,我是怕你看完后指摘它需要改进的地方。并不表示它的兼容性不好,它的deprecated特性有明确的列表,而且还发布过兼容的版本,运行时输出用到deprecated特性的地方,以便于迁移。javaeye最近就迁移到2.0上了,可以请robbin有空分享下经验。

你这个论断同样不负责任。

引用
以前我也用java搞过跟爱立信BSC网元有关的告警系统,也含web层的啊,
还是7*24小时运行的,线程这种东西要是Ruby/Rails没搞定的话,不是又少了个适用场合。

web系统是否必须跑在多线程下?是否跑在多线程下性能才高?安全性才强?伸缩性才强?
我们team有布署方面的专家,这方面我不在行,就说说我所了解的吧,请各位指正。
j2ee程序是以多线程的方式跑在jvm中的,在最早的应用中,因为线程的创建和销毁比进程更少耗资源(性能因素),因此被推崇。
而后来发现有很多问题,比如稳定性从理论上不如多进程,伸缩性相对SNA架构的多进程方案又差很多,而多进程方案随着lighttpd等技术和一些理论上的支撑(进程重用等),并随多核技术的到来,线程带来的好处已经极大的弱化,而多进程的模式已经有翻身之势。在互联网应用中,使用多进程方案进行布署,很可能一直以来就是主流(不确定,需要各位大牛指正)。Rails不支持多线程,我觉得根本就不是问题。PHP是什么布署模式?我不了解,有怀疑是。。。(就不说怀疑什么了,呵)
109 楼 dreamhead 2008-04-24  
自言200801 写道
gigix 写道
引用
语法的简洁有时是以牺牲性能换来的,特别对于解释性的语言。

有一个经验,我在JavaEye分享过几次,现在可以再分享一次:如果一个人想说一个软件有问题但又说不出来到底有什么问题,他就会说这个东西有性能问题。只要你听到别人跟你说某某东西有性能问题,你就不妨先大胆假设他压根就弄不清到底有什么问题,十次有九次都是准的。

开一个HTTP连接要几十毫秒,访问一下数据库又是几十毫秒,这个时候你跟我说Ruby作为一种解释性语言会牺牲性能,huh?这个,基本上,就跟十年前人们说Java的性能问题一样,可笑。


呵呵,gigix我知道你在软件工程领域还是算牛的,但是在编译理论跟程序语言设计方面你就别争太多了吧,
每个人都有缺点的,我不知道在哪看过你写的个人传记(忘了),你说你不是科班出身的,说你至今不懂编译原理。

C ruby的前端是基于LALR(1)算法的,它是用 Bison parser(yacc的升级版本)先解析parse.y这个文法文件,
最后得到了parse.c,parse.c将近有1.5万行,它就是个ruby语言的语法分析器,编译后都300多kb啦,

C ruby就是个解释器啊,它要分析ruby脚本,总得把parse加载到内存先吧,
ruby语言的简洁,是因为它提供了很多的语法糖,如果你对java的foreach了解的话,这个foreach它也是个语法糖,
语法糖在内部还要转换成其他形式的,就像foreach会转成普通的for语句一样,这中间就多了一道工序了,
自然就花了额外的时间去处理啦,你再想想ruby语言有那么多的语法糖,光是一个数组就有那么多种格式,
而且C ruby目前似乎没有即时编译功能,每次都得做同样的事,性能不慢才怪呢。


To 自言200801:
从上面你写的这段内容来看,你对Ruby的执行过程本身理解还存在一些问题。

解析是运行Ruby的代码的第一阶段,通常这个阶段所做的工作就是将我们看到的文本解释成一个中间形式,比如语法树。对于Ruby来说,有了这棵语法树之后,就可以进入到第二阶段,执行阶段。

你所说的各种表现形式,各种语法糖,准确来说,都是在第一阶段进行处理的,通常来说,解析只是一次性执行的过程,所以,语法的优劣从整体上来说,对性能影响不大。

真正影响Ruby性能的是它解释执行的方式。关于编译和解释,我曾写过一篇blog专门讨论,有兴趣的话,可以参考一下。《编译与解释》。

另外,有人提到Ruby这么多年一直很慢。其实,我觉得技术并不是决定性因素。因为之前很多年,Ruby只是在很窄的范围内应用,所以,速度并不是关键性因素。随着Rails让Ruby得到更广泛的认识,Ruby的性能问题才逐渐暴露出来,这时候,人们开始有了改进它的想法。所以,之后Ruby在性能问题上才有了很大的进步,也就是Ruby 1.9。Ruby 1.9已经通过编译成虚拟机字节码的方式,大幅度的提高了性能。只是说,因为1.9同时改进了太多的内容(包括虚拟机、语法和库),所以,很难一步到位的得到大家的认可。
108 楼 liusong1111 2008-04-23  
gigix 写道
liusong1111 写道
从更大的角度说,ruby/rails对于软件开发中的 人、流程、产品及开发 各意味着什么?
展开讨论会更有意思。

我去年讲过一个presentation关于这个话题,不知道你有没有听过
Rails是很好的一步,然则一个成熟的Rails团队还需要很多周边的支援


没有,很长一段时间周末有太多私事了。能共享下不?


107 楼 gigix 2008-04-23  
liusong1111 写道
从更大的角度说,ruby/rails对于软件开发中的 人、流程、产品及开发 各意味着什么?
展开讨论会更有意思。

我去年讲过一个presentation关于这个话题,不知道你有没有听过
Rails是很好的一步,然则一个成熟的Rails团队还需要很多周边的支援
106 楼 liusong1111 2008-04-23  
从更大的角度说,ruby/rails对于软件开发中的 人、流程、产品及开发 各意味着什么?
展开讨论会更有意思。
105 楼 gigix 2008-04-23  
引用
因为去年想跟dreamhead讨论XRuby的问题,所以就买了上面两本书来看。

说起来,dreamhead最近每天和我一起做Rails应用,你不妨问问他的感受
104 楼 liusong1111 2008-04-23  
自言200801 写道
liusong1111 写道
自言200801 写道
呵呵,跟liusong1111讨论问题挺有趣的,

好吧,我准备复习一下ruby(一年没看啦),陆陆续续来这探讨一下(最近家事繁忙),
还有<<应用RAILS进行敏捷WEB开发>>第一版这本书过时了没有?(2007年6月30号才买的),
上回在“我开始不喜欢ruby了”里http://www.iteye.com/topic/180517?page=7
想把<<PROGRAMMING RUBY中文版:第2版>>
<<应用RAILS进行敏捷WEB开发>>第一版
转让给别人,过了这么久了,没一个人想要的。


我认识的好多用ruby的人,都埋头做他的事。就我耐不住性子跳来跳去的,看看自己都无聊,今天已经被同事BS好几次了。
要是你有时间进行广泛研究还不错,要是就为了讨论而回头复习ruby,我有点无语。
似乎你有大片时间做研究,欢迎分享你的经验。

<<应用RAILS进行敏捷WEB开发>>第一版从Rails框架的发展上说有点过时,从理解Ruby能力来说不过时。





呵呵,是的,搞应用开发的日子已过去啦(以前做过4年应用开发),现在部分兴趣都在底层啦,
如果碰上讨论问题很用心的人,我会上瘾的,哪怕讨论的东西不是我目前所关注的。
呵呵,因为讨论问题时,只要不是口水战,就会很关注,有时晚上睡觉都还在想着问题,
有时讨论过程中会引发你对其他问题的思考。


呵呵,为了“吵架”俺还在办公室呢。也是很上瘾。
耐不住性子是因为,玩ruby的很多人隐着,不玩ruby的,甚至有些人很早就听说了ruby/rails,一年多的时间都不去学习、了解,--这不是问题,每个人都有自己的兴趣和事情--问题是,却发一些负面的断定性的言论。这对他个人也只能说不负责任,或不考究,但对于读者是种严重的误导。
以我们目前的情况,“Rails不适合大项目”,“Rails相比j2ee没有显著优势”,“Rails的动态特性不可控”等等论调都不成立。

我近6年的工作过程中,头一次体验了产品提前完成,并且在每个sprint里都有足够的时间TDD,review,文档化,重构,交流,学习,研究。代码的质量很靠谱。

不是功能太少,而是很多。并不是太简单,而是很复杂。

以往的经历,哪个team都有做tdd、review、重构...的梦,最大的问题是时间总是不够,要做的事情总是很多。甚至系统还没做完就接近没人敢动的遗留系统了。
103 楼 liusong1111 2008-04-23  
自言200801 写道
我有<<PROGRAMMING RUBY中文版:第2版>>、<<应用RAILS进行敏捷WEB开发>>各一本,
9成新,谁要? 我愿6折转让。

因为去年想跟dreamhead讨论XRuby的问题,所以就买了上面两本书来看。

我只看了一个星期,
<<PROGRAMMING RUBY中文版:第2版>>我看了大部分(第4部分没怎么看),
<<应用RAILS进行敏捷WEB开发>>看了100多页。

我没用RUBY、RAILS做过商业项目,
不过我写过PHP+JS+CSS+HTML+PL/SQL(Oracle)这样的商业项目,代码(包括HTML)全都是人肉敲入的,
有两个这样的商业项目代码量都超过15万行,而且项目几乎都是我一个人完成,
最多不超过3个半月就完成了,开发效率比写JSP高,部署只要把代码放到服务器的相应目录下就行了,简单得很,
但是,现在我非常讨厌去看以前的PHP代码(当然我的代码注释也很多),别人也不愿意去改。

你知道PHP访问数据库有多少种方法吗?

我看Ruby时看到了PHP的影子,做一件事有很多种方式,每人按自己喜欢的方式去做,谁都不想去看谁写的代码。


我通过链接看到你以前的贴,我记性不好(这也是我为什么用ruby的一个原因,它适合像我这种脑容量不足的人)。你没用ruby、rails做过商业项目。我猜你连一个简单的rails demo都没跑过,不然也不会怀疑Rails会有 “PHP访问数据库有多种方法”的问题。碰巧的是,你这里也提到访问数据库,我前面还提出这个问题呢。关于做一件事有多种方式的观点,我前面说过了。以我们现在的情况,很明显Rails不是"write-only"型的。



102 楼 gigix 2008-04-23  
liusong1111 写道
我认识的好多用ruby的人,都埋头做他的事。就我耐不住性子跳来跳去的,看看自己都无聊,今天已经被同事BS好几次了。
要是你有时间进行广泛研究还不错,要是就为了讨论而回头复习ruby,我有点无语。
似乎你有大片时间做研究,欢迎分享你的经验。

<<应用RAILS进行敏捷WEB开发>>第一版从Rails框架的发展上说有点过时,从理解Ruby能力来说不过时。

赞同
Ruby和Rails这东西,没什么好研究的
我用一周业余时间做了一个网站
我们几个同事用周末两天时间又做了一个网站
它就是用来做东西的
就算大道理讲得再有道理
我用J2EE从来没法两天就做出一个崭新网站的
所以这种东西就是自己去体会,好用就用,不好用就拉倒,没啥研究头
101 楼 liusong1111 2008-04-23  
自言200801 写道
呵呵,跟liusong1111讨论问题挺有趣的,

好吧,我准备复习一下ruby(一年没看啦),陆陆续续来这探讨一下(最近家事繁忙),
还有<<应用RAILS进行敏捷WEB开发>>第一版这本书过时了没有?(2007年6月30号才买的),
上回在“我开始不喜欢ruby了”里http://www.iteye.com/topic/180517?page=7
想把<<PROGRAMMING RUBY中文版:第2版>>
<<应用RAILS进行敏捷WEB开发>>第一版
转让给别人,过了这么久了,没一个人想要的。


我认识的好多用ruby的人,都埋头做他的事。就我耐不住性子跳来跳去的,看看自己都无聊,今天已经被同事BS好几次了。
要是你有时间进行广泛研究还不错,要是就为了讨论而回头复习ruby,我有点无语。
似乎你有大片时间做研究,欢迎分享你的经验。

<<应用RAILS进行敏捷WEB开发>>第一版从Rails框架的发展上说有点过时,从理解Ruby能力来说不过时。



100 楼 gigix 2008-04-23  
引用
语法的简洁有时是以牺牲性能换来的,特别对于解释性的语言。

有一个经验,我在JavaEye分享过几次,现在可以再分享一次:如果一个人想说一个软件有问题但又说不出来到底有什么问题,他就会说这个东西有性能问题。只要你听到别人跟你说某某东西有性能问题,你就不妨先大胆假设他压根就弄不清到底有什么问题,十次有九次都是准的。

开一个HTTP连接要几十毫秒,访问一下数据库又是几十毫秒,这个时候你跟我说Ruby作为一种解释性语言会牺牲性能,huh?这个,基本上,就跟十年前人们说Java的性能问题一样,可笑。
99 楼 liusong1111 2008-04-23  
引用
你这个跟闭包没多大关系,无非是个资源管理


对,十分以及完全正确,从需要实现的功能来说,就是资源管理。
不一定非要用闭包实现。现在的问题是,对于这个确定的需求,怎么实现呢?实现成本有多高?维护成本有多高?性能成本有多高?扩展成本有多高?
98 楼 liusong1111 2008-04-23  
mcpssx 写道
Web开发中,闭包的影响力可能没那么大。我不懂php,想问问没有闭包的php是怎么处理数据库连接的打开关闭的。
闭包的威力更多表现在逻辑处理和框架级上。我们的逻辑代码就大量(很自然的)用了它。没有它会是灾难。
======================================================
直接就是mysql_close吧,

你这个跟闭包没多大关系,无非是个资源管理,

C++说的RACC(可能单词有误)的问题,

处理这个C++的析构函数是最强,
.net的using语句
python和boo语言的with语句

都可以确保关闭资源



太多类比了,已经确认你知道C++,.net(C#吧?),python,boo。咱先不说这些东西在功能上的不同,单说它们对于其语言有没有意义?
97 楼 liusong1111 2008-04-23  
mcpssx 写道
Example Algorithms1.java
// Copyright(c) 1996,1997 ObjectSpace, Inc.
import com.objectspace.jgl.*;
import com.objectspace.jgl.algorithms.*;
import com.objectspace.jgl.functions.*;

JGL
    Array array1 = new Array();
    array1.add( "cat" );
    array1.add( "monkey" );
    array1.add( "goat" );
    Applying.forEach( array1, new PrintFunction() );


class PrintFunction implements UnaryFunction
  {
  public Object execute( Object object )
    {
    System.out.println( "PRINT " + object );
    return null; // Not used.
    }
  }




你贴的这段代码难道真是为了佐证ruby的表现力有多强吗?
好人啊~

我现在在怀疑跟一个连ruby的closure都不会用的人大谈ruby怎么行怎么不行,这种感觉很不好,原谅我作为一个普通的人类的龌龊的想法吧。
96 楼 liusong1111 2008-04-23  
引用
ruby真么实现了,无非就是没有类定义那行,直接就可以传递execute这个函数过去了


引用回贴的时候JE居然出了超人页面。。。

那么,请你用ruby实现一下吧。
95 楼 liusong1111 2008-04-23  
那么你上面那段php程序如何保证一次请求结束后数据库肯定能关闭呢?是每进程一长连接模式吗?需不需每个php页面都调这两个方法?
如果java早点提供closure,ajoo老大也不会有这篇《你擦了吗?确定擦了?真的确定擦了?》:
http://www.iteye.com/topic/13649


引用
php、ruby似乎有个共同点,创始人都是业余的,语言和库都有点“补丁化的味道”,杂乱就是啦。


php我不了解,ruby语言哪点是“补丁化的味道”,哪点杂乱,还得细细说。倒是一些主流语言,一点决策失误,就背上了历史的包袱,要保证兼容,就得补丁着来。

引用
php、ruby/Rails都是鼓励“个人英雄主义”的,巴不得一个项目只要一个人就能搞定,
对于开发速度、部署来说,php还是快一点的,以前写PHP时,写完直接刷新浏览器看看就行啦,从不写什么单元测试的。


ruby/rails的这种鼓励,是哪些方面体现出来的?开发速度是rails快还是php快,我没有经验。你做这个结论是依据什么?写php和rails程序的个人经验吗?
至于写完直接浏览器就看,不止rails可以,连java多数情况也可以 -- 只要你不删除方法。


引用

10行代码和1行代码的区别,这种比较没什么意义的,就像输出个“hello world”一样。

这没有区别,是指因为像"hello world"吗?那么在一个大型工程里,它如果仍有1行代码顶10行的能力,有意义不?

引用
语法的简洁有时是以牺牲性能换来的,特别对于解释性的语言。

你这个“有时”用的好,虽然我有时也用“有时”,还得表示钦佩。暗示了语法简洁性和性能存在某种联系。真的是这样吗?

引用
等等吧,2009年java就会有closure啦,closure不光是用来写出简短的代码,还为多核时代的到来做准备。
c ruby的实现貌似不用本地线程,

另外,也请关注一下Scala及基于Scala的lift(一个号称比Rails还牛B的web框架)

等着看历史的发展吧,其实工业界更偏爱静态类型编译语言。

已经等不起了,就算java提供了closure,看前面的示例代码,就没有用的欲望。何况那么多ruby特性它都没有(连计划都没有)提供。做Web开发也不用关心线程的问题 - Rails甚至不是线程安全的。

Scala是个有趣的语言,不过它的一些语法我在怀疑在工业应用(比如Web开发领域)上的有效性,Rails在Ruby的Web框架中也不能算实现的最优雅的,只是最成熟的。
工业界的偏爱在悄悄改变。
94 楼 liusong1111 2008-04-23  
mcpssx 写道
liusong1111 写道
rubynroll 写道
1. 就算匿名类可以实现类似闭包的效果,就像gigix说的,10行代码和1行代码的区别. 而且这一行是优雅自然的代码. 这就是一个巨大的进步.



为了对前面的讨论有个交待,mcpssx须给出用java5怎么实现那个功能。是不是多一行类定义就能搞定,用JGL、common collection都行。


forEach(arr, IEach);


class DoubleImpl implemention IEach {
   public double handle(double i) {
      return i*2;
   }
};

forEach(arr, new DoubleImpl());


多了一行定义类的doubleImpl


发现gigix前面的代码也不是正宗ruby代码。
除了类定义那行,和一堆大括号,这行 public double handle(double i) { 就不算代码啦?

93 楼 liusong1111 2008-04-23  
引用
2,我以为重构大多时候是依靠工具的,而不是人在那里到处重构。否则这和以前人改程序有什么效率提高?


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

为什么会发出这种声音呢? 现在时髦的话是:你猜
92 楼 rubynroll 2008-04-23  
那个,就归入“顾左右而言它”了。
91 楼 liusong1111 2008-04-23  
rubynroll 写道

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


不止这样,还倾向于拿别人(java)不靠谱的未来跟ruby的现在甚至过去进行比较。

相关推荐

    网友原创系列之Silver_Ruby主题包

    【Ruby语言介绍】 Ruby是一种面向对象的、动态类型的编程语言,由日本人松本行弘(Yukihiro Matsumoto)在1995年设计并创造。...对于那些喜欢Ruby语言的人来说,这样的主题包无疑为他们的编程生活增添了色彩和乐趣。

    Ruby 15天自学教程ppt

    ThoughtWorks的首席科学家、敏捷开发的鼻祖Martin Fowler在博客中曾写到“我的任何一个合格读者都应该知道这几年我已成了一个Ruby爱好者,简洁的语法及优雅的框架使我喜欢上Ruby,它已成为我开发个人项目的首选语言...

    Ruby 自学教程程序源代码

    ThoughtWorks的首席科学家、敏捷开发的鼻祖Martin Fowler在博客中曾写到“我的任何一个合格读者都应该知道这几年我已成了一个Ruby爱好者,简洁的语法及优雅的框架使我喜欢上Ruby,它已成为我开发个人项目的首选语言...

    vim-ruby-refactoring, 在vim中,用于 ruby的重构工具 !.zip

    用于Vim的 ruby-重构工具我喜欢 vim 当我开发软件的时候,它是我的选择编辑器。目前( 至少在过去的4年中) 主要使用 ruby 编程语言。在开发过程中,我一直丢失了一个重构工具,但是我从没有心想过( 就像你在内部找到...

    ruby-rust-interop:展示在 Ruby 运行时中从 Rust 调用基于数字的函数

    ruby-rust-互操作展示在 Ruby 运行时中从 Rust 调用基于数字的函数我希望这些例子能帮助你使用 Rust 设置 Ruby! 所有这些示例都在使用 Ruby 2.1.6 和 Rust 1.0.0-beta.4 的 Windows 上进行了测试如果你克隆 repo,...

    audio-ruby:Ruby 的跨平台音频设备接口

    如果您喜欢处理其中任何一个,我非常乐意接受 Pull Requests! 用法 列出可用的音频设备 音频模块提供了一种方法来检索系统上可用的所有音频设备的列表。 require 'audio' devices = Audio . devices # =&gt; An ...

    vimilicious:用于创建 vim 插件的 Ruby 库

    就像我喜欢和崇拜 rails.vim 一样......你有没有看过源代码? 天啊! 将 ruby​​ 用于一些 vim 脚本或应用程序创建可以使您的生活更轻松。 只有那些使用 ruby​​ 支持编译的 vim 才能利用 vimilicious 或基于 ...

    Combine_pdf:一个纯Ruby库,用于合并PDF文件,数字页甚至更多。

    我喜欢这种宝石,但是我觉得是时候该放弃维护它了,并专注于音乐和其他我想开发的东西。 如果您想加入并最终接手,请打我。 已知局限性 快速淘汰: 阅读PDF表单时,某些表单数据可能会丢失。 我已尽力尝试解决此...

    myGoodiesAutoInstall:我最喜欢的程序的Ruby Auto Installer

    自动安装我的东西一个简单的ruby脚本,它会自动安装一些程序。 该脚本在采用纯格式后非常有用,因为它可以节省一些时间。 试试吧!安装...安装自动构建并运行wget ...

    rubyfmt:Ruby自动格式化程序!

    不,但是距离真的很近我该如何使用建立它: 确保您已安装货物运行make all 将target / release / ruby​​fmt-main复制为rubyfmt到路径上的某个rubyfmt Rubyfmt支持以下CLI调用: &lt;whatever&gt; | rubyfmt &lt;whatever&gt; ...

    小胡子:无逻辑的Ruby模板

    胡子 受和启发,Mustache是​​一种与框架无关的呈现无逻辑视图的方法。 正如ctemplates所说,“它强调... 我喜欢写Ruby。 我喜欢编写HTML。 我喜欢写JavaScript。 我不喜欢编写ERB,Haml,Liquid,Django模板,将Ru

    实例解析Ruby程序中调用REXML来解析XML格式数据的用法

    我有这样的问题:我不喜欢令人困惑的 API。有几种用于 Java 实现的 XML 解析器 API。其中大多数都遵循 DOM 或 SAX,并且在基本原理上与不断出现的众多 Java API 非常相似。也就是说,它们看 上去象是由从未使用过...

    ruby_videos:关于 Ruby 编程语言或与之相关的优质视频的精选列表

    这个项目的原因是我喜欢许多概念,但也想知道我是否可以只用标准的 Rails 和 PORO(带有一些轻量级的 gem)来做类似的事情。 虽然这个项目非常简单,但很多代码对于项目来说看起来有点过分。 这是现阶段的预期。 ...

    ruby-hysh:黄鹰的Ruby外壳

    但是我不喜欢bash的语法,宁愿在Ruby中这样做。 这项工作基于HYSH(黄鹰在Common Lisp中的SHell: )。示例 def dpkg_installed1 ( package_names = nil ) Hysh . out_lines -&gt; { Hysh . pipe [ 'dpkg' , '-l' ], ...

    程序员为什么还要刷题-ruby-101:Ruby-101

    程序员常刷题Ruby 101:学习 Ruby 编程语言 在这里,我描述了我学习 Ruby 的历程,Ruby 是一种非常酷且快速的面向对象的解释型编程语言。 有一些编程概念的基本知识是很好的开始。 本文档会定期更新,我也会提供大量...

    rubysnake:经典蛇游戏的克隆,使用图形库ruby2d

    欢迎来到我的Ruby蛇游戏。 这是使用ruby2d gem /库构建的项目。 要运行此程序,您应该已经安装了这样的库,然后您可以通过在控制台中输入: ruby snake.rb来运行游戏。 安装Ruby2d 首先:安装所需的依赖项 对于Mac...

    ruby101-kitap:土耳其Ruby书

    我一直很喜欢的口袋书。 无论是在大小还是内容上。 您可以始终随身携带的资源,以紧凑的方式包含与其主题相关的所有内容。 我的目的是准备一本味道像这样的床头书,随时随地都可以找到。 编写本书时,最困难的...

    rubylisp:Ruby的Lisp方言

    从设计角度来看, 是我最喜欢的语言,并且可以利用现有JVM库这一事实非常方便。 但是只有一个问题-它的启动时间太慢。 很不错; 它是一个强大的Lisp,而且速度很快。 但是,找到X现有库来执行Y任务并不总是那么...

    生菜:受Ruby启发的Cucumber的python行为驱动开发工具

    我喜欢python,而且从没这么做过。 但是我也曾经错过过一些使编写测试变得容易和有趣的事情。 我喜欢,这是一个单元测试的pythonic框架。 但是,随着我从事的项目的增长,测试也随之增加,并且变得越来越难以理解...

Global site tag (gtag.js) - Google Analytics