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

我喜欢Ruby的原因

浏览 68527 次
精华帖 (0) :: 良好帖 (12) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2008-04-09  
刚看到“姜太公”说开始不喜欢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
   发表时间:2008-04-09  
写代码还是形而下的,在形而上的方面,我更觉得:

1. 当只需要花更少的时间写代码了,我就有更多的时间写文档和跟队友沟通和看 javaeye。

2. 现在被炒的很热的 Martin Flower 推的那些设计模式,部分已在 Ruby 中内建了。有人说优秀的语言是应该看不到设计模式的痕迹,虽然那个人说的是small talk,不过挺适用描述Ruby。
0 请登录后投票
   发表时间:2008-04-09  
动态,就我而言,动态的好处就是可以让代码很精简。可以让我在只有很少开发时间的情况下,按时的完成项目。
0 请登录后投票
   发表时间:2008-04-09  
实际上,我并没有说java好,也没有说ruby不好,只是在那个帖子里碰巧提到java而已,完全没有拿java和ruby相比的意思,二者根本就是不同的语言,没有可比性。我也说了,我也非常喜欢ruby,现在写一些脚本工具之类的都是用ruby。
我想说的是ruby还有很多地方要改进,变得更好。
另外就是动态对象扩展会造成设计无法形成清晰的接口和接口文档,阻碍编程人员的交流。动态特性不能乱用。这个只能等待实践的检验了。
0 请登录后投票
   发表时间:2008-04-09  
ruby 还是比较年轻的语言
java 现在已经不是当年那个小孩子了,大的很
再加上一大堆第三方的类库,框架.

java的问题不在于没有选择,而是选择太多太丰富了
ruby的问题不在于选择多,而在于没的选,rails?

如果能够用ruby语言多开发出几个类似rails的框架出来,才好进行比较.
0 请登录后投票
   发表时间:2008-04-10  
一点意义都没有,你把这个封装成一个函数,下次一句话就掉用了不更简单.
ruby 只是多提供几个方法,只能说明有足够的库,就能够更方便的实现.
0 请登录后投票
   发表时间:2008-04-11  
低开发成本,高维护成本。 如果团队过大的话,开发成本也不小。
0 请登录后投票
   发表时间:2008-04-11  
smilerain 写道
一点意义都没有,你把这个封装成一个函数,下次一句话就掉用了不更简单.
ruby 只是多提供几个方法,只能说明有足够的库,就能够更方便的实现.

呵呵,你写一个来看看。很简单,假设已经有map这个函数,它遍历一个数组(或者列表,都行),对其中每个元素做一个操作,得到一个新的列表,前后两个列表的元素个数一样。
比如:

def double(x) { x * 2 }
a_list = [1, 2, 3, 4]
map(a_list, double) # [2, 4, 6, 8]


Java一个大毛病就是函数不是一等公民,high order就得用一堆诸如annonymous inner class之类的丑恶语法才能实现。C#至少这一点就比Java看着漂亮。
0 请登录后投票
   发表时间:2008-04-12  
代码能说明的问题是有限的,这里的代码只能说明ruby令人喜欢的一面,这也是诱惑大家去学习ruby的原因,但ruby也有令人不爽的一面,我相信多数评价ruby的人都了解ruby的优点,但要知道语言的缺点才算真正了解这个语言
0 请登录后投票
   发表时间:2008-04-12  
lllyq 写道
代码能说明的问题是有限的,这里的代码只能说明ruby令人喜欢的一面,这也是诱惑大家去学习ruby的原因,但ruby也有令人不爽的一面,我相信多数评价ruby的人都了解ruby的优点,但要知道语言的缺点才算真正了解这个语言

说实话我不知道为什么非得“真正了解这个语言”不可。
我拿它干活,干完活我就去吃饭泡吧去了,没事我了解它干嘛?
0 请登录后投票
论坛首页 编程语言技术版

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