自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Ruby趨于人性化 比Python更易閱讀?

開發(fā) 后端 前端
我們已經(jīng)看到了許多關(guān)于Ruby與Python的對比,語言的復(fù)雜性可以通過選擇語言回避,而問題本身的復(fù)雜性是選擇哪個(gè)語言都無法回避的。

我們已經(jīng)看到了許多關(guān)于Ruby與Python的對比,51CTO之前也曾報(bào)道過《Python與Ruby各有千秋》。語言的復(fù)雜性可以通過選擇語言回避,而問題本身的復(fù)雜性是選擇哪個(gè)語言都無法回避的。

在某種程度上說,是一場無意義的錘子和錘子的比拼。

1、字符串格式化

Python

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

在閱讀Python字符串格式化的時(shí)候,視線先看到字符串的%s字樣,但是不知道這指的是什么,然后看后面的變量k,再接著看第二個(gè)%s ,再看后面的v,視線必須不停地在字符串和變量之間跳動(dòng)。

Ruby

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

而閱讀Ruby字符串格式化的時(shí)候,看到需要變量的地方,變量就在那里。順便一說,

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

這種風(fēng)格的代碼在Ruby里面也能用,Ruby的理念認(rèn)為解決問題的方法可以不止一種,選擇哪種取決于程序員的喜好。

2、映射(迭代)

這在Python中叫做列表解析,不過不管叫什么,實(shí)際上這是迭代的一種。

  1. [elem*2 for elem in li] 

li是一個(gè)list。閱讀這行代碼的時(shí)候,先看到elem*2,但是不知道elem是什么。繼續(xù)看,再次看到elem ,還是不知道是什么。一直看到in li,原來elem是li中的元素,對了,剛才對elem做了什么來著?

如果一個(gè)元素的解析還不太迷惑,繼續(xù)看下面這個(gè)例子。

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

請問我應(yīng)該先看哪個(gè)部分。

下面是Ruby版:

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

“求params的映射(map),其中的元素是原本params里面k, v鍵值對組成的字符串“,我不確保沒有Ruby基礎(chǔ)的人會(huì)不會(huì)習(xí)慣這種block語法,但是我可以保證閱讀代碼的時(shí)候是從左到右的單一順序。

3、DSL(領(lǐng)域語言)

為了舉一個(gè)現(xiàn)實(shí)中有代表意義、但是又足夠簡單的例子,我找到了webpy和sinatra,這分別是Python和Ruby社區(qū)熱門的簡潔風(fēng)格Web框架。

前置的說明是,webpy,甚至是Python,都不是一個(gè)追求DSL的社區(qū)。而Ruby社區(qū)則以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已經(jīng)夠簡潔了。相比起Java EE和.net龐大的IDE和那根本不知道拿來做什么的規(guī)范,webpy讓我們回歸了單純,簡約而不簡單。但是,簡約方面,Ruby的DSL文化更是做到了極致,看sinatra的例子:

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

sinatra的DSL非常簡練,甚至讓人懷疑它是否是一個(gè)玩具。或者可以看下sinatra的文檔或者用戶列表,現(xiàn)在請先暫且相信,它做的事跟webpy沒什么兩樣。

DSL是語言層面的封裝,把復(fù)雜性留在庫的內(nèi)部,把接口用DSL的形式暴露給程序員。這其實(shí)跟類和函數(shù)方式的API沒有什么不同。不過DSL會(huì)讓人忘記自己正在使用什么語言,Rubyists的說法是:魔法。

總結(jié)

Python和Ruby雖然同為動(dòng)態(tài)語言時(shí)代的佼佼者,不過開發(fā)和社區(qū)風(fēng)格有很大的不同。這歸根于兩個(gè)語言誕生時(shí)的理念不同:Python注重規(guī)范化,一個(gè)問題只有一個(gè)方法,縮進(jìn)的強(qiáng)制約束,便于多人合作;而Ruby注重人性化,便于閱讀,一個(gè)問題有幾個(gè)方法,過多的魔法需要使用者自己鍛煉駕馭能力。

這樣的結(jié)果就是偏重?cái)?shù)學(xué),偏重模范化的人喜歡Python;偏重樂趣,偏重人類語言化的人喜歡Ruby。

你喜歡哪樣呢?歡迎在留言中與他人分享。

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

【編輯推薦】

  1. 旁觀者清 Python與Ruby各有千秋
  2. 跑起來吧 Ruby on Rails開發(fā)初體驗(yàn)
  3. Python線程編程比Ruby應(yīng)用的優(yōu)點(diǎn) 

 

責(zé)任編輯:王曉東 來源: 博客
相關(guān)推薦

2013-07-29 10:46:51

編程語言

2009-06-05 10:36:22

智能客服呼叫中心

2009-08-27 09:35:55

Windows 7黑屏激活

2010-04-15 14:11:15

SharePoint

2010-03-15 11:58:36

無線路由IT產(chǎn)品D-Link

2020-09-08 15:26:56

數(shù)字

2012-05-09 11:31:24

2012-02-21 15:24:07

聯(lián)想筆記本

2009-09-12 10:28:15

UbuntuAlpha 5安裝界面

2013-01-28 15:02:56

Windows Pho

2011-10-20 13:40:04

惠普大幅面打印機(jī)

2009-04-09 08:39:05

iphoneGmail蘋果

2012-05-08 16:13:36

iPhone

2022-09-06 10:52:04

正則庫HumrePython

2017-09-11 23:11:00

2010-05-20 11:24:57

TIBCO事件驅(qū)動(dòng)

2014-07-16 11:28:46

歐朋瀏覽器

2014-08-04 14:05:03

大數(shù)據(jù)

2018-08-23 08:13:01

Linux命令

2009-03-04 06:08:00

掃描服務(wù)器人性化設(shè)計(jì)服務(wù)器應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)