当前位置:首页 > 开发 > 编程语言 > Ruby > 正文

Programming Ruby 读后感

发表于: 2011-12-26   作者:bookjovi   来源:转载   浏览次数:
摘要:   虽然一直没有什么机会接触Ruby,但是还是忍不住在网上找来了"Programming Ruby"看了两遍。不得不承认Ruby加入了很多新的语言特性,但是却觉得少了一些新奇感,尤其在面向对象部分,很多还是在OO的语言属性上改头换面而已,"Programming for fun"的确很适合Ruby这门语言。     &nb

 

虽然一直没有什么机会接触Ruby,但是还是忍不住在网上找来了"Programming Ruby"看了两遍。不得不承认Ruby加入了很多新的语言特性,但是却觉得少了一些新奇感,尤其在面向对象部分,很多还是在OO的语言属性上改头换面而已,"Programming for fun"的确很适合Ruby这门语言。

 

    Ruby与传统的OO语言(Java, C++)比较加入了一些FP函数语言的特性,所以对很多面向对象的同学有了很多新奇感,一个一个说吧。

 

1) Classes, Objects, and Variables

    在主讲面向对象语言属性的这一章里,Ruby与Java/C++没有什么本质不同,都有class method, class variable,access control(private/protected/public), 只不过Ruby用了@标识了很多东西,对于static method这用class名+method名的方式,Ruby中还加了一个attribute的概念,如简单的attr_write,这样的attribute可以为编程人员少些一些代码,所以就把这些attribute算作是Ruby语法糖吧,Java中的final修饰符在Ruby中也有体现,那就是freeze。Ruby中的attribute并没有让我很意外,倒是Ruby中的inspect让我眼前一亮,其实inspect就像是Java中的reflection,但是这个inspect确实让调试方便不少(这就像gdb中直接可以print一个struct内容一样,Python中也有,Java中可以有,不过要写一点代码,c/c++中就别想了)。

 

2)Containers, Blocks, and Iterators

    Containers和Java差不多,最基本的Array和Hash,Java中都有,在这里Ruby和Python/Perl类似,都把Hash作为一种built-in的数据结构。

    Blocks是Ruby中属于核心概念,本质就是闭包(Closure),Closure在语言设计中历史悠久,只不过在C/C++/Java中体现的不是很明显,所以觉得Closure很新奇。Closure在古老的Lisp中就存在了,Lisp和Python中称之为Lambda,Erlang中称为fun,Java中Closure则为Inner class(Java中的Iterator设计模式就是通过Inner class实现的),综上,Blocks在Ruby中不算新奇,只不过Ruby中用的比较多而已,Ruby中的Iterator基本上已是通过Blocks实现的。

 

3)Exceptions, Catch, and Throw

   异常处理在很多现代语言中都存在,它们不止在Java/C++中存在,在非OO语言中一样存在,如Erlang,异常处理不属于面向对象的范畴,try catch只是古老异常处理方式(error code层层返回,层层检查)的一种进化而已。

 

4) Threads and Processes

   Ruby中只有Thread的实现方式让我感觉有点意思,它不是真正意义上的native thread,它的thread是虚拟机实现的内部thread,这个Erlang的process类似,但却有一些不同,Ruby的内部thread是运行在一个native process中,这就是说无论你的机器增加多少cpu core,你的Ruby多线程程序性能不会因此提高,这是Ruby多线程的劣势,Erlang在这个方面则先进的多(如果想用Ruby写个高并发的大型软件,不妨考虑下Erlang)。Ruby中的thread是共享空间的,所以不存在Erlang的消息机制。由于Ruby的thread与OS的thread没什么关系,所以它的可移植性比较好。

 

 

好了,就写这么多,Ruby的出现到底是为了解决什么问题呢?C++相比C带来了OO,Java相比C++带来了GC/Relcetion还有OO其他方面的改进,Python相比Java带来动态类型OO和快速开发,Erlang相比其他FP语言带来了Concurrent,Ruby给我们带来了什么?Ruby带来ROR?ROR的核心理念在于grails,而不是Ruby。

 

正如Ruby作者所言:Programming for fun.

 

Programming Ruby 读后感

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Day one 方法时通过向对象发送消息来唤起调用的。 而ruby里,确定绝对值的能力是内建在数字中——处
点击这里下载chm part1 点击这里下载pdf 点击这里下载chm part2 提示:chm版 【内容简介】 本书详细
在Ruby中,通过调用构造函数(constructor)来创建对象 song1=Song.new("Ruby") Ruby对单引号串处理
Containers,Blocks,and Iterators arrays与hashes是Ruby的关键内置类,块语法用于对集合分层(pair w
5 Ruby
Ruby Ruby on rails初体验(二) 摘要: 体验一中添加了一个最基本的支架和一个简单的数据迁移,实现了
  结对人员:100616班10061151 祁彦博,100617班10061192 张永强   这一周完成了结对编程的项目
习惯于JUnit做功能方面unit test,而对于有些Test需要有一定的压力来模拟一定并发的读和写,借助JMe
1. Linear programming: -- Problem-solving model for optimal allocation of scarce resources, a
在我尝试着记录下这几天所学到的关于Intentional Programming的一些东西之前,请先允许我表示一些感
前段时间刚把苏杰同学的《人人都是产品经理》看完,早有耳闻,读完后第一感觉是:接地气——可能因
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号