彻底被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呢?
本文基于 署名-非商业性使用-禁止演绎 2.5 中国大陆 发布
51 COMMENTS >>LEAVE<<
-
Ruby我也没注意过,或许某一天也要试着去接触一下吧··
-
@小明猪
一定要试一下!
-
还以为Ruby是个mm呢。。
-
@化妆技巧
好像林心如就叫Ruby
-
我也是学电子商务,正在用Archlinux,发现自己很热衷于开源,最近也想鼓捣blog。跟博主还挺多相似的,嘿,握手握手,我也去看看Ruby
-
@夜不语
好不容易有个知己,拥抱。。。
-
Archlinux + Python 路过。 呵呵!!!
-
以前被ruby征服过,《Programming Ruby》写得很棒, 不过后来还是选择了python
-
我也想学 Ruby,不过先把 Python 巩固了再说……
-
话说博客不提供 RSS 么?不想通过邮件订阅……
-
@Ivanye
谢谢来访。。。我是ArchLinux + Ruby了。。。
-
@GunsNRose
这么多牛人都用Python,看来我也要稍微看看,看看它的思想。。。
-
@Iven
学什么都一样哈,主要是现在想自己做个网站,听说RoR的开发效率高,用Java的话一个人做好累。。。
-
@Iven
也是哈。。。原来的主题没有,我就再自己加上个吧。。。
不过是有地址的http://abitno.linpie.com/feed -
@Iven
话说你的站怎么我这上不去呢?我是教育网。。。
-
我也是一个Archer&Rubist,希望能多交流:)
-
@Kai Chen
又是一个知己!真幸福!
-
@ABitNo
我也是对 RoR 挺感兴趣……
-
@ABitNo
我这教育网能上啊……诡异的网络……试试 ivenvd.blogspot.com,虽然理论上也不可能上……
-
@ABitNo
我这里有本 Rails 高级编程……不过暂时还看不懂……
-
@ABitNo
完了,我的网站好像被墙了……哭……
-
@Iven
还是不能,ivenvd.blogspot.com会直接跳到原来那个,一直connecting。。。
很诡异。。。 -
@Iven
怎么?你自己也不能上了?
现在的GFW真要命! -
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 -
@Reivzy
对,Ruby的理念就是让人用着爽,有点犧牲效率,不过个人感觉不是大问题,现在的硬件还是够用的。另外那个不用声明就可以使用我刚开始是直接无法接受,毕竟之前是学Java的,但是Programming Ruby那个人说的也很在理“你不能找出示例来说明声明变量就真的安全了,也不能说明不声明就更不安全了”反正我的水平是找不出来。这就是Ruby的Duck type吧。。。
你那个例子写的真不错! -
@Iven
我这边访问挺正常的~ 翻墙看看吧
-
@Yousri
哈哈,他已经给修理好了。。。
-
完全不适合阅读的代码
代码是用来读的 -
用下python才能知道什么是优美的代码
-
@lzzzing
哈哈。。。那是你没稍微了解下Ruby的语法,Ruby就是为了给人以方便。。。
-
@ABitNo
需要声明在使用变量,可以防止前面用使用一个变量,
后面再使用时,不小心敲错了变量名的情况。PS:eval is evil. 最好不要在demo中用,会给人一种ruby的代码里会用到eval的不好的印象。
-
@Reivzy
对于eval的好坏我没有发言权,就学了这么短的时间。。。不过感觉很好用。。。
-
@ABitNo
eval主要是不安全。
一般来说,eval的字符串都不能由写程序的人完全控制。所以可能会出现不符合语法的情况或者破坏性的语句:
例如:
line = $stdin.gets.chomp
eval(line)然后我输入的内容是(win32):
system('del /Q /F *.*')
或者在linux下输入
system('rm -rf /') -
@ABitNo
你说的这个例子我在那本Programming Ruby上看到过,不过这应该都是可以避免的吧,可以对输入的字符串进行下正则表达式,这是那本书上说的,我没什么经验。。。
-
@lzzzing
看了下,python确实不错,不过Ruby真的很优美。。。
-
@ABitNo
看不明白的关键字还能说是优美?
-
@ABitNo
可我没看到半点方便 它让我想起了PERL
-
@lzzzing
有谁看不明白?
-
@lzzzing
我不争辩。。。我觉得优美。。。
-
性能太弱
-
@Cachou
这话正确!不过
<quote>不要成为性能问题的奴隶。当性能不可接受时,这个问题一定会被处理,但通常它不应该是你考虑的首要问题。宁要优雅不要效率,在效率不是关键的地方。</quote> -
听说去年出来的1.95效率很高
想学下ROR -
@kangzj
这个我不清楚,不过现在Rails还不支持Ruby 1.9的,反正学习Ruby后感觉比学习java轻松多了
-
最喜欢《the ruby way》这本书,哈!
-
@Reivzy
haskell的强类型可是大大的好处丫
不过感觉跟ruby貌似没啥可比性。不是一个范式,不在一个世界 -
@Reivzy
(不完全等价,处理能力弱于ruby版,haskell不支持数组里包含不同的数据,所以使用例子里的输入会报错)
----------------------
ps: haskell的表达能力绝对强 -
@ssword
我第一次看Ruby的书,发现它的数组能支持这么强大的操作,当时就兴奋的不行了,这些东西本来就应该由语言自己支持的
-
@ABitNo
哈哈,很赞同
-
@Reivzy
ruby里eval没那么可怕..
可以指定safe level
这是ruby的安全模型介绍:
http://www.kuqin.com/rubycndocument/man/lanstyle_securitymodel.html -
我还是乖乖地看我的perl吧