`
halfmile
  • 浏览: 12165 次
  • 性别: 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
分享到:
评论
10 楼 lllyq 2008-04-12  
gigix 写道
lllyq 写道
代码能说明的问题是有限的,这里的代码只能说明ruby令人喜欢的一面,这也是诱惑大家去学习ruby的原因,但ruby也有令人不爽的一面,我相信多数评价ruby的人都了解ruby的优点,但要知道语言的缺点才算真正了解这个语言

说实话我不知道为什么非得“真正了解这个语言”不可。
我拿它干活,干完活我就去吃饭泡吧去了,没事我了解它干嘛?

又没对你说,那是对LZ说的
对自己喜欢的语言自然就希望多了解了,我想LZ不但是希望多了解自己喜欢的语言,更是希望别的人也了解吧
扩大点说,嫌货才是买货人,就好象你现在看中一个房子了,非常非常喜欢,那么应该尽力去看看别人怎么说它不好的地方
9 楼 gigix 2008-04-12  
lllyq 写道
代码能说明的问题是有限的,这里的代码只能说明ruby令人喜欢的一面,这也是诱惑大家去学习ruby的原因,但ruby也有令人不爽的一面,我相信多数评价ruby的人都了解ruby的优点,但要知道语言的缺点才算真正了解这个语言

说实话我不知道为什么非得“真正了解这个语言”不可。
我拿它干活,干完活我就去吃饭泡吧去了,没事我了解它干嘛?
8 楼 lllyq 2008-04-12  
代码能说明的问题是有限的,这里的代码只能说明ruby令人喜欢的一面,这也是诱惑大家去学习ruby的原因,但ruby也有令人不爽的一面,我相信多数评价ruby的人都了解ruby的优点,但要知道语言的缺点才算真正了解这个语言
7 楼 gigix 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看着漂亮。
6 楼 frozentree 2008-04-11  
低开发成本,高维护成本。 如果团队过大的话,开发成本也不小。
5 楼 smilerain 2008-04-10  
一点意义都没有,你把这个封装成一个函数,下次一句话就掉用了不更简单.
ruby 只是多提供几个方法,只能说明有足够的库,就能够更方便的实现.
4 楼 liujunsong 2008-04-09  
ruby 还是比较年轻的语言
java 现在已经不是当年那个小孩子了,大的很
再加上一大堆第三方的类库,框架.

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

如果能够用ruby语言多开发出几个类似rails的框架出来,才好进行比较.
3 楼 姜太公 2008-04-09  
实际上,我并没有说java好,也没有说ruby不好,只是在那个帖子里碰巧提到java而已,完全没有拿java和ruby相比的意思,二者根本就是不同的语言,没有可比性。我也说了,我也非常喜欢ruby,现在写一些脚本工具之类的都是用ruby。
我想说的是ruby还有很多地方要改进,变得更好。
另外就是动态对象扩展会造成设计无法形成清晰的接口和接口文档,阻碍编程人员的交流。动态特性不能乱用。这个只能等待实践的检验了。
2 楼 jack 2008-04-09  
动态,就我而言,动态的好处就是可以让代码很精简。可以让我在只有很少开发时间的情况下,按时的完成项目。
1 楼 halfmile 2008-04-09  
写代码还是形而下的,在形而上的方面,我更觉得:

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

2. 现在被炒的很热的 Martin Flower 推的那些设计模式,部分已在 Ruby 中内建了。有人说优秀的语言是应该看不到设计模式的痕迹,虽然那个人说的是small talk,不过挺适用描述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表单时,某些表单数据可能会丢失。 我已尽力尝试解决此...

    使用 Redis 让你的 Ruby 对象更受欢迎.zip

    使用 Redis 让你的 Ruby 对象更受欢迎使用 Redis 让你的 Ruby 对象更受欢迎!我不再在生产中使用这个 gem (它是为 Gowalla 编写的),如果你还使用并且愿意帮助我维护它,请告诉我@schneems。你喜欢这个Likeable 将使...

    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任务并不总是那么...

Global site tag (gtag.js) - Google Analytics