最好的编程语言是怎样的?
沒有語言是完美的。
因語言演化,不同時期不同版本的程序員寫的代碼,在用同一門語言在編程。所以,我們經??吹礁鞣N不同時期風格代碼并存。
新的語言特性都是為提高代碼表達性,減少犯錯幾率。多用新語言特性寫代碼,絕對沒毛病!
那應該如何使用“新”語言特性,讓代碼寫得更好?
Optional
暫不考慮缺乏封裝問題。這段代碼有問題。因為未考慮對象可能為 null。
更好的寫法:
這種寫法很稀缺,所以,新項目總是各種NPE。如果你要問程序員為什么不寫對象為 null 的判斷,答曰:忘了。
空指針的發明者 Tony Hoare 將其稱為“自己犯下的十億美元錯誤”。
還好Java 8有Optional,它提供了一個對象容器,你需要從中“取出(get)”你所需要對象,但取出前,你需判斷該對象容器中是否真的存在一個對象。
你再不會忘掉判斷對象是否存在,因為你需要從 Optional 取出存在里面的對象。正是這多余的一步,避免你“忘”了。
更簡潔的寫法:
項目中所有可能為 null 的返回值,都要返回 Optional,可大大減少各種意外驚喜。
函數式編程
準備參數的代碼:
- 篩選出審核通過的章節
- 再把章節轉換成與翻譯引擎通信的格式
- 最后把所有得到的單個參數打包成一個完整的章節參數。
Java8后,不是不需要遍歷集合,而是有了更好的遍歷集合方式。函數式編程,大部分操作都可歸結成列表轉換,最核心的列表轉換就是 map、filter 和 reduce。
大部分循環語句都是在對一個元素集合進行操作,而這些操作基本上都可以用列表操作進行替代。
再CR這段代碼,有一循環語句,這循環語句在處理的是一個集合中的元素,可用列表轉換:
有人可能說這段代碼還不如我原來的循環語句簡單。兩種寫法根本差異是抽象層次不同,可讀性完全不同:
- 循環語句是在描述實現細節
必須要做一次“閱讀理解”知曉其中細節才能知曉整個場景 - 列表轉換的寫法是在描述做什么
基本上和我們用語言敘述過程對應。
其實大多數人選擇循環語句只是因為對列表轉換不熟練,多寫即可。
為什么我的感覺實踐中,使用這種風格,為寫出來的代碼更難理解?
你在列表轉換過程中寫了太多代碼!很多人直接在列表轉換過程中寫 lambda。lambda 本身相當于一個匿名函數,所以,很多人寫成長函數了。
lambda 是為了寫短小代碼提供的便利,所以,lambda 中寫出大片代碼,根本就是違反 lambda 設計初衷的。最好的 lambda 應只有一行代碼。
那若一個轉換過程中就有很多操作咋辦?
提取出一個函數!就像 toSectionParameter:完成從 Section 到 SectionParameter 轉換。這樣一來,列表轉換的本身就完全變成了一個聲明,這樣的寫法才是能發揮出列表轉換價值的寫法。
總結
代碼風格逐步演化,每個程序員對語言的理解程度都有所差異,所以,我們的屎山項目中,各種代碼風格并存,各具風騷,加重代碼理解難度,這其實就是:不一致的壞味道。
編程風之所以格會過時,是因為它存在問題,新風格就是用更好方案,注意跟上時代,擁抱變化,多用新特性!
總結
以上是生活随笔為你收集整理的最好的编程语言是怎样的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2014-2024,变了什么?
- 下一篇: android keystore 查