盡管示例經常被夸大(例如,計算導入次數),但確實Java程序需要更多的代碼行。 但這根本不是一件壞事。
相反,這是我真正喜歡的東西。 實際上,這與語言的冗長無關—除了匿名類而不是閉包之外,沒有什么其他語言太冗長。 它是關于核心庫的。 所以–我喜歡以冗長的方式編寫核心庫的方式。 兩個例子:
- 拿java.io。 包。 讀取和寫入文件,流等。這有點難掌握,一開始,您需要復制粘貼很長的代碼片段以僅讀取文件。 但這迫使您理解流和讀者的抽象。 其他語言則很簡單:
var contents = readFile("path")
很酷,但是您永遠不必了解I / O管理的工作原理。 如果讀取失敗會怎樣? 對文件進行部分讀取就足夠了嗎? 您可以討價還價嗎? 您應該關閉資源還是將其自動關閉? 您無需為打招呼世界程序回答這些問題,但很快就需要了解它們。 不太冗長的語言對您隱藏了它們,并推遲了這種“抽象啟示”。 - Servlet API。 乍一看,它看起來有些毛茸茸的類和接口。 但是很快,您就會意識到整個過程是如何工作的–不僅在Java中,而且在http請求的一般生命周期中。 因為您需要一個Servlet對象,請求和響應對象以及要寫入的輸出流,所以您了解了整個請求-響應周期。 我這里有一個個人例子。 我已經在學校寫PHP一年了。 然后一個月的Java和servlet使我完全明白了整個過程。 PHP非常易于使用–
$_GET['foo'], session_start()
和之間的一堆HTML。 因此,我不必理會底層的機制。 Java迫使我這么做。
您可能會說–很好,它迫使您學習這些重要的概念和抽象,但是它也應該為您提供一種輕松完成事情的方法。 但是,如果核心庫本身具有這些選項,則所有教程都將顯示這些選項,并且較低級的API將被忽略。
因此,解決方案是–第三方圖書館。 Apache和Google為您提供了這些。 有了番石榴和阿帕奇共享區,您將獲得所有這些一線。 Joiner.on(",").join(array)
FileUtils.readLines(..)
, Joiner.on(",").join(array)
等。但是,您不是從這些庫開始的,而是學習了如何在較低的層次上進行工作–仍然需要知道。
參考: 為什么我們喜歡 JCG合作伙伴 Bozhidar Bozhanov的 Java Verbosity,位于Bozho的技術博客上
相關文章 :
- 討厭Java嗎? 您正在打錯仗。
- 選擇一種新的編程語言來學習
- 編寫不爛的代碼
- 如果我有更多的時間,我會寫更少的代碼
翻譯自: https://www.javacodegeeks.com/2012/01/why-i-like-verbosity-of-java.html