亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3285 | 回復: 2
打印 上一主題 下一主題

Ruby趨于人性化 比Python更易閱讀? [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-01-20 11:34 |只看該作者 |倒序瀏覽
Ruby趨于人性化 比Python更易閱讀?


我們已經看到了許多關于Ruby與Python的對比,語言的復雜性可以通過選擇語言回避,而問題本身的復雜性是選擇哪個語言都無法回避的。

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

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. class hello:      
  7. def GET(self):         
  8. return 'Hello, world!'
  9. if __name__ == "__main__":  
  10. 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非常簡練,甚至讓人懷疑它是否是一個玩具;蛘呖梢钥聪聅inatra的文檔或者用戶列表,現(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

論壇徽章:
0
2 [報告]
發(fā)表于 2011-01-20 12:34 |只看該作者
我之所以待見Ruby,就是因為它比較貼切人的思維的語法,并且是魔幻般的語法結構,甜蜜的語法糖。

論壇徽章:
0
3 [報告]
發(fā)表于 2011-01-20 13:09 |只看該作者
回復 2# 2gua


    謝謝,瓜哥支持,呵呵!
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP