日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Ruby趨于人性化比Python更易閱讀?

我們已經看到了許多關于Ruby與Python的對比,之前也曾報道過《Python與Ruby各有千秋》。語言的復雜性可以通過選擇語言回避,而問題本身的復雜性是選擇哪個語言都無法回避的。

創(chuàng)新互聯(lián)是一家專業(yè)從事成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁設計的品牌網(wǎng)絡公司。如今是成都地區(qū)具影響力的網(wǎng)站設計公司,作為專業(yè)的成都網(wǎng)站建設公司,創(chuàng)新互聯(lián)依托強大的技術實力、以及多年的網(wǎng)站運營經驗,為您提供專業(yè)的成都網(wǎng)站建設、營銷型網(wǎng)站建設及網(wǎng)站設計開發(fā)服務!

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

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是什么。繼續(xù)看,再次看到elem ,還是不知道是什么。一直看到in li,原來elem是li中的元素,對了,剛才對elem做了什么來著?

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

 
 
 
  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(領域語言)

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

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

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

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

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

總結

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

這樣的結果就是偏重數(shù)學,偏重模范化的人喜歡Python;偏重樂趣,偏重人類語言化的人喜歡Ruby。

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

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

【編輯推薦】

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

分享標題:Ruby趨于人性化比Python更易閱讀?
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/cdepgeg.html