彻底被Ruby给征服了

我是在去年寒假的时候了解到Ruby的,那时ABitNo仍然在专心的学习Java,没有去关心过Ruby。直到最近失眠的那个晚上,被自己一些乱七八糟的想法给说服了,到图书馆借了些Ruby的书开始看。

几乎每一本书上都会写这么一些话:

计算机应该是仆人,而不是主人,而且如Matz所说,聪明的仆人应该通过几条简短的命令就能完成复杂的任务。
不要成为性能问题的奴隶。当性能不可接受时,这个问题一定会被处理,但通常它不应该是你考虑的首要问题。宁要优雅不要效率,在效率不是关键的地方。

用一个周的时间看完了那本厚厚的《Programming Ruby》,整个看书的过程都给我一种非常舒服的感受。现在看《The Ruby Way》,没有一点厌倦的感觉,不知是Ruby还是Fulton的原因,估计Ruby的功劳要大些,毕竟之前看那些Java名著的时候总是昏昏欲睡。

欣赏下Ruby的代码吧:

# 这段代码用来解析用逗号分隔的数据
string = gets.chop!
# Suppose we read in a string like this one:
# "Doe, John", 35, 225, "5'10\"", "555-0123"
data = eval("["+string+"]")
data.each { |x| puts "Value = #{x}" }

可以输出下面的結果

Value = Doe, John
Value = 35
Value = 225
Value = 5'10"
Value = 555-0123

看着这简洁干练的代码,有什么理由不去使用Ruby呢?

TAGS:Ruby

51 COMMENTS >>LEAVE<<

  1. 小明猪

    Ruby我也没注意过,或许某一天也要试着去接触一下吧··

  2. ABitNo
    @小明猪

    一定要试一下!

  3. 化妆技巧

    还以为Ruby是个mm呢。。

  4. ABitNo
    @化妆技巧

    好像林心如就叫Ruby

  5. 夜不语

    我也是学电子商务,正在用Archlinux,发现自己很热衷于开源,最近也想鼓捣blog。跟博主还挺多相似的,嘿,握手握手,我也去看看Ruby

  6. ABitNo
    @夜不语

    好不容易有个知己,拥抱。。。

  7. Ivanye

    Archlinux + Python 路过。 呵呵!!!

  8. GunsNRose

    以前被ruby征服过,《Programming Ruby》写得很棒, 不过后来还是选择了python

  9. Iven

    我也想学 Ruby,不过先把 Python 巩固了再说……

  10. Iven

    话说博客不提供 RSS 么?不想通过邮件订阅……

  11. ABitNo
    @Ivanye

    谢谢来访。。。我是ArchLinux + Ruby了。。。

  12. ABitNo
    @GunsNRose

    这么多牛人都用Python,看来我也要稍微看看,看看它的思想。。。

  13. ABitNo
    @Iven

    学什么都一样哈,主要是现在想自己做个网站,听说RoR的开发效率高,用Java的话一个人做好累。。。

  14. ABitNo
    @Iven

    也是哈。。。原来的主题没有,我就再自己加上个吧。。。
    不过是有地址的http://abitno.linpie.com/feed

  15. ABitNo
    @Iven

    话说你的站怎么我这上不去呢?我是教育网。。。

  16. Kai Chen

    我也是一个Archer&Rubist,希望能多交流:)

  17. ABitNo
    @Kai Chen

    又是一个知己!真幸福!

  18. Iven
    @ABitNo

    我也是对 RoR 挺感兴趣……

  19. ABitNo
    @Iven

    刚把那本Agile Web Development with rails给打印了出来,那么厚。。。

    主要是国内买不到最新版本的那本书

  20. Iven
    @ABitNo

    我这教育网能上啊……诡异的网络……试试 ivenvd.blogspot.com,虽然理论上也不可能上……

  21. Iven
    @ABitNo

    我这里有本 Rails 高级编程……不过暂时还看不懂……

  22. Iven
    @ABitNo

    完了,我的网站好像被墙了……哭……

  23. ABitNo
    @Iven

    还是不能,ivenvd.blogspot.com会直接跳到原来那个,一直connecting。。。
    很诡异。。。

  24. ABitNo
    @Iven

    怎么?你自己也不能上了?
    现在的GFW真要命!

  25. Reivzy

    ruby用起来很舒服,和它的设计理念有关系。
    相对起来就是执行速度稍微慢了一些。
    还有就是个人觉得ruby里面不用声明就可以使用变量这一点不是很好,
    最好像perl一样提供一个检查的机制。

    PS:最近对haskell比较熟练,把上面的例子用haskell重写一下(不完全等价,处理能力弱于ruby版,haskell不支持数组里包含不同的数据,所以使用例子里的输入会报错),比ruby稍微复杂些(未测试,大概是这样的):
    do string <- last `fmap` getLine
    let data = read $ "[" ++ string ++ "]"
    mapM_ (putStrLn . ("Value =" ++) . show) data
    或者翻译成一行写法:
    mapM_ (putStrLn . ("Value =" ++) . show) $ read . ("[" ++) . (++ "]") . last `fmap` getLine

  26. ABitNo
    @Reivzy

    对,Ruby的理念就是让人用着爽,有点犧牲效率,不过个人感觉不是大问题,现在的硬件还是够用的。另外那个不用声明就可以使用我刚开始是直接无法接受,毕竟之前是学Java的,但是Programming Ruby那个人说的也很在理“你不能找出示例来说明声明变量就真的安全了,也不能说明不声明就更不安全了”反正我的水平是找不出来。这就是Ruby的Duck type吧。。。
    你那个例子写的真不错!

  27. Yousri
    @Iven

    我这边访问挺正常的~ 翻墙看看吧

  28. ABitNo
    @Yousri

    哈哈,他已经给修理好了。。。

  29. lzzzing

    完全不适合阅读的代码
    代码是用来读的

  30. lzzzing

    用下python才能知道什么是优美的代码

  31. ABitNo
    @lzzzing

    哈哈。。。那是你没稍微了解下Ruby的语法,Ruby就是为了给人以方便。。。

  32. Reivzy
    @ABitNo

    需要声明在使用变量,可以防止前面用使用一个变量,
    后面再使用时,不小心敲错了变量名的情况。

    PS:eval is evil. 最好不要在demo中用,会给人一种ruby的代码里会用到eval的不好的印象。

  33. ABitNo
    @Reivzy

    对于eval的好坏我没有发言权,就学了这么短的时间。。。不过感觉很好用。。。

  34. Reivzy
    @ABitNo

    eval主要是不安全。
    一般来说,eval的字符串都不能由写程序的人完全控制。所以可能会出现不符合语法的情况或者破坏性的语句:
    例如:
    line = $stdin.gets.chomp
    eval(line)

    然后我输入的内容是(win32):
    system('del /Q /F *.*')
    或者在linux下输入
    system('rm -rf /')

  35. ABitNo
    @ABitNo

    你说的这个例子我在那本Programming Ruby上看到过,不过这应该都是可以避免的吧,可以对输入的字符串进行下正则表达式,这是那本书上说的,我没什么经验。。。

  36. ABitNo
    @lzzzing

    看了下,python确实不错,不过Ruby真的很优美。。。

  37. lzzzing
    @ABitNo

    看不明白的关键字还能说是优美?

  38. lzzzing
    @ABitNo

    可我没看到半点方便 它让我想起了PERL

  39. ABitNo
    @lzzzing

    有谁看不明白?

  40. ABitNo
    @lzzzing

    我不争辩。。。我觉得优美。。。

  41. Cachou

    性能太弱

  42. ABitNo
    @Cachou

    这话正确!不过
    <quote>不要成为性能问题的奴隶。当性能不可接受时,这个问题一定会被处理,但通常它不应该是你考虑的首要问题。宁要优雅不要效率,在效率不是关键的地方。</quote>

  43. kangzj

    听说去年出来的1.95效率很高
    想学下ROR

  44. ABitNo
    @kangzj

    这个我不清楚,不过现在Rails还不支持Ruby 1.9的,反正学习Ruby后感觉比学习java轻松多了

  45. ssword

    最喜欢《the ruby way》这本书,哈!

  46. ssword
    @Reivzy

    haskell的强类型可是大大的好处丫
    不过感觉跟ruby貌似没啥可比性。不是一个范式,不在一个世界

  47. ssword
    @Reivzy

    (不完全等价,处理能力弱于ruby版,haskell不支持数组里包含不同的数据,所以使用例子里的输入会报错)
    ----------------------
    ps: haskell的表达能力绝对强

  48. ABitNo
    @ssword

    我第一次看Ruby的书,发现它的数组能支持这么强大的操作,当时就兴奋的不行了,这些东西本来就应该由语言自己支持的

  49. ssword
  50. Hooopo
    @Reivzy

    ruby里eval没那么可怕..
    可以指定safe level
    这是ruby的安全模型介绍:
    http://www.kuqin.com/rubycndocument/man/lanstyle_securitymodel.html

  51. yetone

    我还是乖乖地看我的perl吧

LEAVE A RESPONSE >>CANCEL<<

loader