杂谈#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的主要内容,如果未能解决你的问题,请参考以下文章