成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

智能客服呼叫中心

2025-05-16 07:30:00

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

數字

2009-09-12 10:28:15

UbuntuAlpha 5安裝界面

2012-05-09 11:31:24

2013-01-28 15:02:56

Windows Pho

2012-02-21 15:24:07

聯想筆記本

2009-04-09 08:39:05

iphoneGmail蘋果

2011-10-20 13:40:04

惠普大幅面打印機

2017-09-11 23:11:00

2022-09-06 10:52:04

正則庫HumrePython

2014-08-04 14:05:03

大數據

2018-08-23 08:13:01

Linux命令

2010-05-20 11:24:57

TIBCO事件驅動

2014-07-16 11:28:46

歐朋瀏覽器

2012-05-08 16:13:36

iPhone
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 综合久久av| 国产精品视频久久久久久 | 久久久久久久久国产成人免费 | 久草成人 | 亚洲免费精品 | 久草欧美视频 | 久久精品国产99国产 | 仙人掌旅馆在线观看 | 国产成人99久久亚洲综合精品 | 成人网在线观看 | 成人欧美一区二区三区黑人孕妇 | 中文字幕高清一区 | 91传媒在线观看 | 亚洲视频免费观看 | 亚洲精品乱码久久久久久久久久 | 欧美激情精品久久久久久变态 | 91精品久久| 欧美人妖网站 | 欧洲国产精品视频 | 日韩色图视频 | 亚洲一区二区在线 | 国产成人jvid在线播放 | 国产精品一区2区 | 久久久精品久久久 | 韩日免费视频 | 久久久久亚洲精品 | 国产精品久久国产愉拍 | 亚洲美女一区 | 欧美日韩大陆 | 精品久久久久久久久亚洲 | 国产精品海角社区在线观看 | 久久久精彩视频 | 国产一区二区三区在线看 | 欧美久久一区 | a精品视频 | 欧美日本韩国一区二区三区 | 一区二区三区欧美 | 日本色婷婷 | 欧美在线观看一区 | 中文字幕国产 | 欧美日韩视频在线播放 |