? 也許很多人認(rèn)為,編程只要被計算機讀懂就可以了。 ? 但是對于調(diào)試人員,或者維護(hù)人員來說,也得需要易懂可讀。 ? 總之,越是容易理解和閱讀的代碼當(dāng)然越好了。 ? 這不,關(guān)于編程語言Python和Ruby誰更可讀,網(wǎng)友都吵翻了。 ? ? ? 很多網(wǎng)友站隊Ruby,這是為什么呢? ?
Ruby大戰(zhàn)Python
? ? ? ? ? 其實,Ruby和Python幾乎沒有區(qū)別。 ? 如果一個Python程序員打開了一個Ruby代碼庫,他不需要外部資料也能輕松弄懂它。 ? 反過來Ruby程序員也是如此。 ? 然而,Ruby程序員不太可能像Python程序員瀏覽Ruby代碼庫那樣輕松地瀏覽Python代碼庫。 ? ? 接下來本文將告訴你原因。 ? 先讓我們先用Python來創(chuàng)建一個類「博客文章」。 ? ? 我想要打印這篇博客文章的標(biāo)題,在Python中有兩種方法可以實現(xiàn): ?
? 第一種是簡單的打印屬性(attribute)。 ?
? 第二個是在我們的類中添加一個 __str__ 方法: ?
? 這樣我們就能更輕松地打印標(biāo)題了。 ?
? 那如果我想要改變這篇博客的標(biāo)題呢? ? 同樣很簡單。 ?
? 讓我們看看同樣的步驟在Ruby里表現(xiàn)如何。 ?
? 類運行同樣很輕松。 ?
? 讓我們來試著打印這篇博客的標(biāo)題。 ?
? oops!出現(xiàn)了未定義的方法(undefined method)。 ? 在Ruby中,無法像在Python中那樣訪問實例變量。你需要一個getter。 ?
? 你也不能直接設(shè)置屬性——你需要一個setter: ?
? 現(xiàn)在我們再試著運行看看。 ?
? 到現(xiàn)在Python和Ruby的可讀性似乎都不錯,等等,讓我們看看下面的測試。 ? 在Python里,我們可以通過BlogPost.count或post.count訪問帖子的數(shù)量。 ?
? 而在Ruby中,我們可以訪問post.count,但我們不能像在 Python 中那樣訪問 BlogPost.count。 ? 由于這是一個類變量,我們需要能夠從類本身訪問它。 ?
? 現(xiàn)在我們可以使用BlogPost.count了,但我們不用post.count,因為它可能與常規(guī)實例變量混淆。 ?
? 現(xiàn)在我們只能從BlogPost 類中訪問count,那我們可以設(shè)置類變量嗎? ? 讓我們試試看。 ?
? OMG,我們從來沒有為這個變量定義過setter。 ? 放到Python里怎么樣? ?
? 有用了,我們甚至可以在類里完成這一操作。 ? 那么有人就要問了,Ruby的對象更直接嗎? ? 我認(rèn)為在 Ruby 中更容易看出類和實例屬性之間的區(qū)別。 ? Setter 和 getter 允許您清楚地指定哪些屬性是可讀和可寫的。 ? 您可以通過不實現(xiàn) setter 來保護(hù)您的類屬性。在Python中,很容易意外寫入count屬性——這會破壞你的程序。 ? 默認(rèn)情況下,post.count 和 BlogPost.count 都返回屬性的值,但如果它只能從類中訪問,則更容易注意到它是類屬性。 ? 文章最后的結(jié)論說,顯然Python和Ruby都比PHP或Java更容易閱讀,但Ruby更近了一步,它寫出來的代碼讓你一眼就能看明白。 ?
網(wǎng)友爭論
關(guān)于Python和Ruby誰更可讀,網(wǎng)友們在評論區(qū)展開了激烈的討論。 ? ? 單獨看,我認(rèn)為Ruby比Python更具可讀性,并且容易理解。實際上,Ruby代碼并非如此。一旦有人開始進(jìn)行高級元編程,你就想殺了他然后把他給埋了。 ? 使用Ruby編寫的Web應(yīng)用開發(fā)框架Rails在很大程度上可以通過自主設(shè)計、良好的文檔,以及已經(jīng)編寫問題答案的大量用戶群來擺脫這些困境。 ?
? 網(wǎng)友大贊,這確實反映了我真實的經(jīng)歷。Ruby是一門非常一致的語言,但我認(rèn)為人們真正迷戀 Ruby 的是元編程,也包括我自己在內(nèi),很快你將需要在大腦中掌握大量上下文來理解所有正在發(fā)生的「魔力」。 ? 有人就對其進(jìn)行了反駁。 ?
? 我精通的Python,直到現(xiàn)在我仍然無法在Ruby中做任何有用的事情。其實,Python比Ruby更具可讀性、易懂。 ? 我同意,對于這兩種語言的新手來說,Ruby的@和@@可能會使閱讀起來有點困難,而且對我來說似乎更冗長,Python獲勝。 ?
? 還有網(wǎng)友直接搬出了Ruby設(shè)計者Yukihiro Matsimuto曾說過的話, ? 我沒有讓Ruby對于每個人來說都很完美,因為每個人感受不同。沒有一種語言可以完美地適合所有人。 ? 對于Guido van Rossum來說,最完美的語言可能是Python。 ? 我希望看到Ruby能夠讓世界上每個程序員變得高效,享受編程,并且快樂編程。這是Ruby語言的主要目的。 ? ? 有網(wǎng)友認(rèn)為這篇文章就是在諷刺。每次比較之后,當(dāng)他們說Ruby更易讀時,我都以為他們是在開玩笑,直到看到了多重繼承這部分。 ?
? 要說,Python和Ruby真正受歡迎程度,那絕對是Python獲勝。 ? 就拿GitHub在2021年底發(fā)布的年度報告來看,除了霸榜的JavaScript,Python是第二受歡迎的編程語言。 ? Ruby的受歡迎程度也是近年來連續(xù)下降。 ?
? 從應(yīng)用廣泛程度上來看,Python的應(yīng)用范圍更廣。 ? 除了web開發(fā)外,Python還被廣泛用在服務(wù)器后端的高性能服務(wù)器實現(xiàn),各種密集運算,全文檢索,各種文本處理,系統(tǒng)管理等等。 ? 那么,Ruby的應(yīng)用僅限在web開發(fā)領(lǐng)域。 ? ? 再從薪資待遇上來看, ? 根據(jù)在線社區(qū)Glassdoor的數(shù)據(jù),Ruby開發(fā)人員的平均年薪應(yīng)約為76,540美元,或每月大概6380美元。 ? Python開發(fā)人員的平均年薪為92,000美元,相當(dāng)于每月近7670美元。 ? 這么來看,Python開發(fā)人員薪水要比Ruby的高,每月多出來1000多美元。 ? 不管怎么說,Python和Ruby更像是拼音輸入和五筆輸入的感覺。Python語言更簡單,適合初學(xué)者,而Ruby的語法更豐富,要求更高。 ? 那么,你覺得這兩種語言哪個更易懂可讀?? ?
評論