我們不提倡以貌取人,但是人確實有美丑之別,美人讓人賞心悅目,丑人讓人。。。不那么賞心悅目。
代碼也一樣。
計算機編程里有一組相關的概念,一個叫做Prettify(美化),一個叫做Uglify(丑化)。
Prettify的典型應用是在JSON/XML/HTML這些數據的呈現上,對眼睛不友好的json,烏央烏央的一坨,讓人看起來很費勁:
[{“name”:“Mac”,“language”:“python”,“major”:“computer application”},{“name”:“Ava”,“language”:“C++”},{“name”:“Ryan”,“language”:“Java”}]
對眼睛友好的json,層次結構清晰明了:
[
{
“name”: “Mac”,
“language”: “python”,
“major”: “computer application”
},
{
“name”: “Ava”,
“language”: “C++”
},
{
“name”: “Ryan”,
“language”: “Java”
}
]
而Uglify(以及Obfuscate/混淆)的應用場景,是在不改變代碼邏輯的情況下讓代碼很難理解,以減少代碼被剽竊抄襲的可能,起到保護代碼作用。比如,以下代碼很容易理解:
def get_user(username):
pass
username = ‘ava’
user = get_user(username)
以下代碼和以上代碼在功能上是同等的,但是非常“反人類”:
def a121(rw24__fdx):
pass
kwlekf_fw12q= ‘ava’
II11LL =a121(kwlekf_fw12q)
這個例子看似很蠢,但是它可以讓我們更直觀地看到代碼可讀性(Readability)的重要性,從而引起一些反思:自己寫的代碼可能是不是也像是被“丑化”過,讓人看得視力下降,血壓上升,怒從心頭起,惡向膽邊生?
代碼能正確工作,這僅僅是寫代碼的基本要求,高質量的代碼,一定具有良好的可讀性。
在某種程度上來說,寫代碼是一種社交行為,其溝通的對象不僅包括計算機(使之可以被執行),也包括人。
這其中牽涉到人的環節很多,包括評審代碼和后續的代碼維護(修復缺陷、重構改進)等等,進行這些操作有一個基本前提:理解代碼邏輯!用更直白的話講,就是能看懂。
如何才能讓人更容易看懂?
遵循KISS原則: Keep It Simple and Stupid!簡單直白,一目了然!
我們不妨來賞析兩段詩詞:
“長橋臥波,未云何龍?復道行空,不霽何虹?高低冥迷,不知西東”,出自杜牧的《阿房宮賦》,描寫了阿房宮的氣勢。
“不敢高聲語,恐驚天上人”,出自李白的《夜宿山寺》,描寫了山寺高樓。
這兩段詩詞具有一定的可比性:
都是描寫建筑
作者年代相近(事實上,杜牧比李白晚生了一個世紀,離我們的年代更近)
都是傳世名篇。
但是,他們的風格顯然不一樣。
《阿房宮賦》引經據典,辭藻華麗,但是不容易看懂,讓人望而生畏。《夜宿山寺》用詞簡單卻絲毫不犧牲詩意的表達,所以老少咸宜,販夫走卒皆可傳誦。
假如,《阿房宮賦》問世之后,我們發現阿房宮其實還有一處奇特的噴泉景觀沒有被寫進去。如果讓我在原文基礎上加上相應的內容,我會很惶恐,因為連原文都沒看懂,談何修改和擴展?不敢,不敢!
但是,如果讓我來擴展《夜宿山寺》,雖然水平和詩仙有云泥之別,但是因為這首詩良好的可讀性,愚笨如我也讀懂了,或許,我可以斗膽以狗尾續貂。。。
代碼需要讓計算機明白我們想讓它做什么,同時也需要讓人(其他程序員)可以很容易地明白其中的意圖和思路。詩詞的可讀性影響詩詞的傳承,代碼的可讀性影響代碼的傳承(可維護性),在這個方面,詩詞和代碼是相通的。
寫到這里,我的心情突然緊張起來了。我總是教訓徐小胖寫作文天馬行空離題萬里,沒想到,我自己的毛病也沒有改過來。為了打造嚴肅的軟件編程技術公眾號,我以后要爭取做到扣題。
原文標題:漫談代碼可讀性
文章出處:【微信公眾號:Linuxer】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
源代碼
+關注
關注
96文章
2950瀏覽量
67881
原文標題:漫談代碼可讀性
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
云端超級計算機使用教程
虛擬內存對計算機性能的影響
工業中使用哪種計算機?

評論