杂谈#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){ yp"Iluv Yumi in #{y}"}

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

p"Ruby"ifdeveloper.luvsRuby?

p"Ruby"unlessdeveloper.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的时候再讨论。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180129G18HAQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券