可读性代码:为什么、怎样以及什么时候
如果你對開發團隊進行問卷,大多數人會說“我們想要可讀性高的代碼”。你甚至發現有些人認為可讀性比功能更重要。但是,當要求人們對可讀性做出定義時,他們的意見就會出現分歧。Laura Savino在Explore DDD 2018大會上的演講就是以這個作為前提。她闡述了為什么我們想要可讀性高的代碼、可讀性究竟意味著什么,以及什么時候必須優先考慮可讀性。
\\Savino擁有小學法語教師的背景,后來成為iOS開發人員和導師,因此,她能夠提供更多有關比較自然語言和編程語言的見解。剛開始學習新編程語言的程序員通常先學寫一個基本的“Hello,world!”應用程序。同樣,“Bonjour”、“Hola”或“Guten-tag”可能是學習法語、西班牙語或德語的人學會的第一個單詞。
\\正如程序員將迅速學會“Hello,world!”,口語也會很快進入中間階段。Savino舉了一個例子,在法語課上問一個同學是否愿意在課后和你一起去喝咖啡(Voulez-vous prendreuncaféavelve moiaprèslescours?)。即使他拒絕了(Désolé,je ne peux pas prendredecaféprèslescours),在別人看來這是有史以來最無聊的談話,但你自己卻感覺飄飄然:你說了一個句子,然后有人理解它,因為你收到了適當的回應,而你了解回應是什么意思。這就像在iOS應用程序中顯示數據一樣——它不是那么吸引人,但當你第一次成功完成這個任務時,你的腎上腺素會飆升。
\\學習語言的高級階段超越了對語法的思考。你的目標已經超越了只是相互理解,你現在需要深入細節。這時候編程語言與人類語言之間的類比開始不再奏效,或者至少需要更深入的分析。
\\在進行代碼評審時,經常會有人說,“我無法理解這些代碼”,而另一個人(可能是作者)反駁說,“但這種方式更具可讀性”。Savino用這個例子來說明“可讀性取決是誰在閱讀代碼”。讓可讀性變得復雜的是代碼有兩種不同的受眾:其他開發人員和計算機。因為計算機如果無法讀懂我們的代碼,它們很快就會告訴我們,我們自然會基于計算機的反饋做出調整。我們承認這種偏見的存在,有時候會在代碼周圍加上人類可讀的注釋。但是,Savino警告說,“注釋并不能帶來具備可讀性的代碼”。
\\Savino解釋了解讀文本或代碼與流利閱讀之間的區別。她使用E. E. Cummings的詩“when serpents bargain for the right to squirm”作為例子,一個美麗而復雜的作品需要閱讀多次才能真正開始理解其中的含義。當你在閱讀代碼時遇到不熟悉的術語時需要經歷類似的過程——查找一個,然后是下一個,然后是下一個,你就像進了一個兔子洞,直到你忘記了最初想要理解的內容為止。Savino警告說,雖然可以從深刻的理解中獲得快樂,但“寫詩與開發軟件不是一回事”。
\\相反,流利的閱讀是一種快速而正確的理解,不會占用你的工作記憶。多年的閱讀經驗讓你能夠快速瀏覽文章并仍然能夠理解其中的內容。Savino認為,閱讀可讀性高的代碼也是如此。當代碼很容易閱讀時,大腦可以騰出一部分發現其中可能出現的問題,讓代碼評審更加高效。
\\在給出了高可讀性代碼為什么如此重要的原因之后,Savino探討了如何寫出高可讀性代碼的技術。在與語言不流利的談話對象溝通時應該避免使用俚語,并使用明確的表達方式。在代碼中,方法的命名可以用beginApp(),而不是releaseTheHounds(),并在每一步給出變量和調用結果,而不是將函數調用鏈接在一起。
\\Savino還探討了我們的本能模式匹配能力。在抽象層面,需要使用“斜視測試”來查看代碼的一般性結構,看看是否有任何異常的東西。在更低的層面,盡量避免使用看起來相似的字符和符號,包括!、I、l和1,這些可能會導致反模式匹配。最后,如果你正在做一些與眾不同的東西,那就以一種可以讓它從脫穎而出的命名方式。
\\對于作家來說,最好的建議是“了解你的受眾”。Savino說,當你的受眾是閱讀你的代碼的人時,你應該更進一步,并信任他們。當有人告訴你代碼不夠清晰時,相信他們,然后問他們因為缺少了哪些信息導致代碼難以閱讀。用他們的反饋來提高代碼的可讀性。
\\最后,Savino提到了一些可讀性需要成為主要驅動因素的例子。簡單地說,一段代碼越重要,它的可讀性就應該越高。Savino引用了美國宇航局噴氣推進實驗室的編碼指南,該指南指出,“任務關鍵代碼不應該只是可以辯證的,還必須是絕對正確的”。與人類溝通有關的一個更為實際的場景是火災逃生標志,在逃離火災時,人們不需要額外的努力看懂這些標志。
\\你的團隊應該針對是否以及何時需要可讀代碼展開討論。你的目標應該是所有團隊成員都能流利地閱讀代碼。Savino最后鼓勵每個人進行“更少的解讀,更多的創造”。
\\查看英文原文:Readable Code - Why, How and When You Should Write It
總結
以上是生活随笔為你收集整理的可读性代码:为什么、怎样以及什么时候的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 当Elasticsearch遇见智能客服
- 下一篇: 【静态页面架构】CSS之颜色与单位