編寫 Python 代碼時(shí)要有所取舍
本文是 Python 之禪特別系列的一部分,重點(diǎn)此篇著眼于第七、八、九條原則:可讀性、特殊情況和實(shí)用性。
軟件開發(fā)是一門充滿了取舍的學(xué)科。每一個(gè)選擇,都有一個(gè)同樣合理但相反的選擇。將一個(gè)方法私有化?你在鼓勵(lì)復(fù)制粘貼。將一個(gè)方法公開?你在過早地對一個(gè)接口做出承諾。
軟件開發(fā)者每時(shí)每刻都在做艱難的選擇。雖然 Python 之禪 中的所有原則都在一定程度上涵蓋了權(quán)衡,但下面的原則對一些權(quán)衡進(jìn)行了最艱難、最冷酷的審視。
可讀性很重要
從某種意義上說,這一中間原則確實(shí)是整個(gè) Python 之禪的中心。這條原則與編寫高效的程序無關(guān)。在大多數(shù)情況下,它甚至與編寫健壯的程序也無關(guān)。它講的是編寫出別人能讀懂的程序。
閱讀代碼,就其本質(zhì)而言,發(fā)生在代碼被添加到系統(tǒng)中之后。通常,它會發(fā)生在很久很久以后。忽略可讀性是最簡單的選擇,因?yàn)樗鼘ΜF(xiàn)在沒有傷害。無論添加新代碼的原因是什么,它都會對現(xiàn)在造成影響,無論是一個(gè)令人痛苦的 bug 還是一個(gè)被強(qiáng)烈要求的功能。
如果面對巨大的壓力,把可讀性扔到一邊,只管“解決問題”,而 Python 之禪提醒我們:可讀性很重要。編寫代碼讓它適合閱讀,無論是對自己還是他人,都是一種慈悲。
特殊情況不足以違反規(guī)則
總是有各種借口:這個(gè) bug 特別麻煩,先簡單處理一下吧;這個(gè)功能特別緊急,別管美觀了;這種情況下所涉及的領(lǐng)域規(guī)則特別復(fù)雜,嵌套深點(diǎn)也沒關(guān)系。
一旦我們對特例的借口妥協(xié),大壩就會破裂,就喪失了原則;事情就會演變成一個(gè)瘋狂麥克斯的荒誕癥,每個(gè)程序員都會為自己試圖找到最好的借口。
紀(jì)律需要承諾。只有當(dāng)事情艱辛、有強(qiáng)烈的誘惑時(shí),才是對一個(gè)軟件開發(fā)人員的考驗(yàn)。總是有合理的借口來破壞規(guī)則,這就是為什么必須堅(jiān)守規(guī)矩的原因。紀(jì)律就是向例外說不的藝術(shù)。沒有任何解釋可以改變這一點(diǎn)。
雖然,實(shí)用性勝過純潔性
“如果你只想著擊打、彈跳、撞擊、觸碰敵人,你將無法真正打倒他。” —— 《宮本武藏:水之卷》
歸根結(jié)底,軟件開發(fā)是一門實(shí)用的學(xué)科。它的目標(biāo)是解決真實(shí)的人所面臨的實(shí)際問題。實(shí)用性比純粹性更重要:首先,我們必須解決問題。如果我們只考慮可讀性、簡單性或美觀性,我們將無法真正解決問題。
正如宮本武藏所說的,每一次代碼修改的首要目標(biāo)應(yīng)該是解決問題。這個(gè)問題需要我們心心念念地去解決它。如果我們不以解決問題為目標(biāo),只想著 Python 之禪,我們就辜負(fù)了這些原則。這是 Python 之禪所固有的另一種矛盾。