Ruby趋于人性化 比Python更易阅读?

开发 后端 前端
我们已经看到了许多关于Ruby与Python的对比,语言的复杂性可以通过选择语言回避,而问题本身的复杂性是选择哪个语言都无法回避的。

我们已经看到了许多关于Ruby与Python的对比,51CTO之前也曾报道过《Python与Ruby各有千秋》。语言的复杂性可以通过选择语言回避,而问题本身的复杂性是选择哪个语言都无法回避的。

在某种程度上说,是一场无意义的锤子和锤子的比拼。

1、字符串格式化

Python

  1. "%s=%s" % (k, v) 

在阅读Python字符串格式化的时候,视线先看到字符串的%s字样,但是不知道这指的是什么,然后看后面的变量k,再接着看第二个%s ,再看后面的v,视线必须不停地在字符串和变量之间跳动。

Ruby

  1. "#{k}=#{v}" 

而阅读Ruby字符串格式化的时候,看到需要变量的地方,变量就在那里。顺便一说,

  1. "%s = %s" % [k,v] 

这种风格的代码在Ruby里面也能用,Ruby的理念认为解决问题的方法可以不止一种,选择哪种取决于程序员的喜好。

2、映射(迭代)

这在Python中叫做列表解析,不过不管叫什么,实际上这是迭代的一种。

  1. [elem*2 for elem in li] 

li是一个list。阅读这行代码的时候,先看到elem*2,但是不知道elem是什么。继续看,再次看到elem ,还是不知道是什么。一直看到in li,原来elem是li中的元素,对了,刚才对elem做了什么来着?

如果一个元素的解析还不太迷惑,继续看下面这个例子。

  1. ["%s=%s" % (k, v) for k, v in params.items()] 

请问我应该先看哪个部分。

下面是Ruby版:

  1. li.map {|elem| elem*2}params.map {|k, v| "#{k}=#{v}"} 

“求params的映射(map),其中的元素是原本params里面k, v键值对组成的字符串“,我不确保没有Ruby基础的人会不会习惯这种block语法,但是我可以保证阅读代码的时候是从左到右的单一顺序。

3、DSL(领域语言)

为了举一个现实中有代表意义、但是又足够简单的例子,我找到了webpy和sinatra,这分别是Python和Ruby社区热门的简洁风格Web框架。

前置的说明是,webpy,甚至是Python,都不是一个追求DSL的社区。而Ruby社区则以DSL见长,这样比较似乎有失公允。但这里可以比较DSL的有无对于代码的可读性有什么帮助。

webpy的Hello World:

  1. import web  
  2. urls = (  
  3.     '/', 'hello'  
  4. )  
  5. app = web.application(urls, globals())  
  6.    
  7. class hello:  
  8.     def GET(self):  
  9.         return 'Hello, world!'  
  10. if __name__ == "__main__":  
  11. app.run()  

我对webpy原本的helloworld做了简化,以便和sinatra比较。

坦率地说,webpy的hello world已经够简洁了。相比起Java EE和.net庞大的IDE和那根本不知道拿来做什么的规范,webpy让我们回归了单纯,简约而不简单。但是,简约方面,Ruby的DSL文化更是做到了极致,看sinatra的例子:

  1. require 'sinatra'  
  2. get '/' do  
  3.   "Hello World!"  
  4. end  

sinatra的DSL非常简练,甚至让人怀疑它是否是一个玩具。或者可以看下sinatra的文档或者用户列表,现在请先暂且相信,它做的事跟webpy没什么两样。

DSL是语言层面的封装,把复杂性留在库的内部,把接口用DSL的形式暴露给程序员。这其实跟类和函数方式的API没有什么不同。不过DSL会让人忘记自己正在使用什么语言,Rubyists的说法是:魔法。

总结

Python和Ruby虽然同为动态语言时代的佼佼者,不过开发和社区风格有很大的不同。这归根于两个语言诞生时的理念不同:Python注重规范化,一个问题只有一个方法,缩进的强制约束,便于多人合作;而Ruby注重人性化,便于阅读,一个问题有几个方法,过多的魔法需要使用者自己锻炼驾驭能力。

这样的结果就是偏重数学,偏重模范化的人喜欢Python;偏重乐趣,偏重人类语言化的人喜欢Ruby。

你喜欢哪样呢?欢迎在留言中与他人分享。

原文链接:http://chloerei.com/2011/01/10/714

【编辑推荐】

  1. 旁观者清 Python与Ruby各有千秋
  2. 跑起来吧 Ruby on Rails开发初体验
  3. Python线程编程比Ruby应用的优点 

 

责任编辑:王晓东 来源: 博客
相关推荐

2013-07-29 10:46:51

编程语言

2009-06-05 10:36:22

智能客服呼叫中心

2009-08-27 09:35:55

Windows 7黑屏激活

2010-03-15 11:58:36

无线路由IT产品D-Link

2010-04-15 14:11:15

SharePoint

2020-09-08 15:26:56

数字

2012-02-21 15:24:07

联想笔记本

2013-01-28 15:02:56

Windows Pho

2009-09-12 10:28:15

UbuntuAlpha 5安装界面

2012-05-09 11:31:24

2009-04-09 08:39:05

iphoneGmail苹果

2011-10-20 13:40:04

惠普大幅面打印机

2017-09-11 23:11:00

2012-05-08 16:13:36

iPhone

2022-09-06 10:52:04

正则库HumrePython

2010-05-20 11:24:57

TIBCO事件驱动

2014-07-16 11:28:46

欧朋浏览器

2014-08-04 14:05:03

大数据

2018-08-23 08:13:01

Linux命令

2018-04-23 14:33:31

笔记本接口布局
点赞
收藏

51CTO技术栈公众号