杂谈#1: 给大家介绍一下,这位是Ruby

Posted 自吹ZhiLei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杂谈#1: 给大家介绍一下,这位是Ruby相关的知识,希望对你有一定的参考价值。

今年相当高兴可以TA一门我非常喜欢的课: CIS-196: Ruby on Rails。这门课有两个内容,一是Ruby语言,二是Rails框架。

虽然现在选课已经结束,但还是想花一两篇推送讲讲我为什么喜欢这个课所授的内容,Ruby on Rails整个开发生态,以及为什么同学们应该考虑接触一下Ruby on Rails。

Ruby是个好语言,你说不定会想知道。

Ruby是一名编程语言,角色和Python、Java、C#等相像;Rails是一个专门用于做Web App的框架,角色和Python Django、Java Spring、Node JS等类似。

近年来javascript在统一前后端的路上大步流星、Python依靠机器学习黄袍加身,Java坐守企业级应用固若金汤,Ruby和Ruby on Rails的热度似乎是大不如前了,TIOBE编程语言排名跌到了11的位置。 

尽管如此,Ruby依然以她特有的优雅让众多程序员爱不释手,Rails也以她出众的易用性让众多创业团队如鱼得水。今天先来讲讲Ruby这个语言的优点,下次推送再说Rails,这个为Ruby插上翅膀的框架。

宗旨:快乐最大化

每个语言有每个语言侧重的要素,Python侧重简洁,JavaScript侧重异步,而对于Ruby来说,最重要的是用户体验(Coder Happiness)。

按照Ruby创造者松本行弘(Yukihiro Matsumoto)的话说,Ruby可能不是最简单的语言,但一定是最自然的语言。举几个例子来说:

   999.times { p "I luv Yumi" }  

这是Ruby语言中的for循环,连续打印999次 “I love Yumi” 字段, 如果循环体内需要用到当前的循环变量,那也可以这么写:

   2017.upto(9999) { |y| p "I luv Yumi in #{y}" }  

如果你觉得这些不用到for却又出奇可读的循环体还不够令人窒息,那么下面的分支结构才是真的骚操作:

   p "Ruby" if developer.luvsRuby?          
   p "Ruby" unless developer.hatesRuby? 

从这些例子不难发现:符合Ruby规范的代码,可读性是相当强的,因为它模仿英语,常常可以一段代码单独成句。

特点:万物皆对象

Ruby是一个强类型(Strongly Typed)语言,且所有变量都有且只有一个类型(Type)或类(Class)。 即不会出现一个字符串可以在变成整数,后来又变成小数的情况,这点不同于JavaScript这样的弱类型语言。

然而,Ruby几乎没有“数据类型(Type)” 的概念,而只有“类”Class的概念。也就是说在Ruby中,整数、字符、字符串、浮点数各自都是一个类,因此所有的变量都是对象(Object)。 这和绝大多数面向对象编程的语言都不相同。这些语言都将整数、浮点、字符串等视为基本数据类型,而非对象。

这样做的一大好处就是Ruby语言的灵活度大大提高。 这也是为什么会出现之前 999.times 这样令人匪夷所思的代码(整数怎么会有方法呢?),因为times是整数类的一个方法。甚至基本的运算符也是方法: 2 + 3 * 4 可以写作  2.+(3.*(4))

Ruby提供两种最常用的数据结构:储存元素的数组(Array),以及储存键值对的哈希集(Hash)。他们的一大特点是可以储存不同类型的元素,完全可以存在  [1, 2, 'Zhilei',  'Yumi' 这样的数组,也可以有  { 'Zhilei' : 'Yumi', 'Jack' : 2333 } 这样的哈希集。

同时,庞大的Ruby开发社区也为Ruby语言不断贡献,许多基本元素自带的方法也相当的好用,比如数组的内置方法 Array.uniq 返回一个去除所有重复元素的新数组,或是哈希集(字典)的内置方法 Hash.invert 返回一个将key和value互换的新哈希集。类似操作还有很多,大大降低了程序员对常用方法重复开发的时间。

延伸:可扩展性强

Ruby语言最大的资源就是发布在网上丰富的第三方库。这些库有个可爱的名字:宝石(Gem)。电脑安装Ruby语言环境时也,一般也同时安装一个叫做RubyGem的Ruby语言第三方包管理器。如果想在项目中使用宝石,那么通过命令行在项目目录下输入

 > gem install <宝石名>  

以常用测试库rspec为例,在项目文件夹输入

 > gem install rspec        

回车确认后,RubyGem就会到gem在网上所在位置下载gem到当前项目。完成后在项目代码头上加入require关键字: require 'rspec' 之后便可在代码中调用rspec的类和方法了。

截止2018年1月,rubygem共收录14万余个宝石,共计192亿次下载,规模可见一斑。

以上介绍的只是Ruby语言特性优点的冰山一角,其他好处还包括良好可读的变量命名规范、方便函数式编程使用的Bloc、Lambda、Proc可调用对象等待。

这些特性的主要宗旨就是增加代码可读性和可维护性,从而最大化程序员的快乐,从而提高工作效率。

想要进一步了解Ruby语言的同学们可以参考一下这本大作:《Ruby程序员修炼之道》

遗憾:性能为代价

这门对程序员如此友善的语言为什么用的人没有那么多呢?答案是性能 —— 舒适是有代价的。正因为面向人,而非面向机器作出了许多的优化,Ruby的编译速度较之其他语言会慢许多。根据 "The Computer Language Benchmark Game" 作出的比较,Ruby比Python 面向大多数任务稍慢一些,约在30%左右,而后者面对Java则是被全面碾压:Java一般比Python要块8-10倍,可想而知Ruby面对Java的劣势。

更致命的是,在Ruby主要擅长的Web领域,它的速度与php、JavaScript等主流语言比是最低的。"The Computer Language Benchmark Game" 比较了Ruby与Node JS的性能指标,结果是Node JS对Ruby全面碾压,速度在Ruby的十倍以上。

但是,性能问题究竟有多重要?随着电脑芯片的处理速度越来越快,性能与开发者效率相比,究竟哪一个更重要?如果JavaScript在速度上全面超过Ruby,为什么我们还会在Web开发中使用Ruby?我们下次说Rails的时候再讨论。

以上是关于杂谈#1: 给大家介绍一下,这位是Ruby的主要内容,如果未能解决你的问题,请参考以下文章

杂谈WebApiClient的性能优化

PHP 杂谈 坑爹的file_exists

杂谈图像识别书看完了感觉不过瘾?这些拓展资料值得你关注一下

网络知识杂谈 - https - 原理简述

Cuda架构,调度与编程杂谈

SFDC(12)杂谈