聲明一下,本人無意挑起語言紛爭,只是談談自己的想法。
我也研究過Ruby,感覺它太繁複了,文法太多,文法糖太多,有太多簡寫。
我蠻久沒玩Ruby了,看到這樣的代碼完全看不懂了。
- class Customer < ActiveRecord::Base
- has_many :orders, :dependent => :destroy
- end
也不想看懂了。
剛才又看了一下ruby官網上的一篇文章:To Ruby From Python。這篇文章也太能吹了,顛倒黑白,極盡倭寇無恥之能事!地址:http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-python/
Ruby沒有元組,這不能算優點吧。元組是函數式編程的核心。Ruby一天到晚吹噓函數式編程,沒這個也沒啥好吹的。
· There are no “new style” and “old style” classes. Just one kind.
· Ruby是單根的。Python新風格的類是單根的。但是Python舊風格的類沒有根類。
· Python的類從元類產生。Python舊風格的類也是從元類產生的,可以自訂元類。
Ruby好像也有類似的東西。抱歉,很久沒玩Ruby了。
· You never directly access attributes. With Ruby, it’s all method calls.
· Ruby中不能訪問屬性,它提供了自動產生的get/set方法。Python可以直接存取屬性,需要自己寫get/set方法,或者直接操作變數。__attr__方法中也可以攔截對屬性的訪問。
Ruby的函數調用中()可以省略,對代碼可讀性有很大傷害。
· There’s public, private, and protected to enforce access, instead of Python’s _voluntary_ underscore __convention__.
· Ruby強制定義了類的public,private,protected.
· Python都是public,但是可以__開始的變數會混淆名字。
我覺得這個有沒有都無所謂。
· “mixin’s” are used instead of multiple inheritance.
· Ruby是單繼承的,有特定的mixin機制。Python使用多繼承實現混入。
· 混入指的是多繼承沒有資料只有方法的類。
· You can add or modify the methods of built-in classes. Both languages let you open up and modify classes at any point, but Python prevents modification of built-ins — Ruby does not.
· Python不能修改內建類的方法和屬性,只能繼承它們。
· Ruby可以修改。--------這有個鳥用?把基本類型弄壞了咋整?
· You’ve got true and false instead of True and False (and nil in stead of None).
· Python的關鍵字True,False和None真的詭異。 關鍵字混用大小寫確實不太習慣。
· There are a number of shortcuts that, although give you more to remember, you quickly learn.
They tend to make Ruby fun and very productive.
· 這個是Ruby的一大缺點。Ruby有很多快速鍵,預設值。很詭異。如上面那個Rails產生的類,太難看懂了。
代碼的可讀性肯定是第一位的。Ruby的代碼量雖少但非常晦澀。
Ruby的書中經常引以為豪的幾點是:
1,ruby是完全基於類的語言,類似於Java。
ruby中任何東西都是對象,包括基本類型,整數等。
其實在物件導向方面,Python更勝一籌。
Python中一切都是對象。並且Python允許直接執行模組中的源碼。Python也允許不使用類,直接定義變數,函數。
Ruby就此攻擊說Python物件導向沒有它那樣純粹。其實完全是誹謗!
Python的函數也是對象!是Function類的執行個體。
2,Ruby標榜自己的函數式編程能力很強。什麼lambda什麼的。
其實在面向函數編程方面,Python也更強。
Python支援元組,lambda,內嵌函數,閉包,偏函數。Ruby只有一個Lambda而已!
3,Ruby還標榜自己的Mixin機制。它為了Mixin特地定義了Module這樣一種機制。
Python支援更加簡潔強大的Mixin機制。Python支援多繼承!
4,Ruby標榜自己是DSL語言,有很多快鍵鍵。
實際上造成了源碼的難以理解。
5,Ruby還常常自稱自己的庫多,應用程式多。Ruby除了Rails在Web上有些應用之外,還有什麼呢? 中國程式員學習Python的很少,讓人感覺Python是一種非主流語言。 實際上,在Linux平台,數量最多的開源和商業程式是C程式,第二就是Python了。Linux中有大配量序是用Python編寫的。如虛擬化中的Libvirt和相關的套件等。在Web開發領域,Python也有很多架構。 Python的開源資源浩如煙海,Ruby怎麼比? 說句實話,Ruby也是設計精巧,不錯的語言。相當靈活,威力很強。但是Rubyer到處詆毀其他語言,擺出老子天下第一的架勢,這我就看不慣了。 既生瑜何生亮!Ruby和Python相比,還是要略遜一籌。我更看好Python!