就像其他語言一樣,Java也會隨著時間的推移而發(fā)展,Java代碼的編寫風格也是如此。然后是帶有l(wèi)ambdas、Stream<T>和可選<T>的Java8,這些功能元素確實影響了我們編寫Java代碼的方式,但并沒有發(fā)生革命,進化相當緩慢,為什么?想學習java的小伙伴,可以報名參加java培訓,可以在短時間內(nèi)獲得快速提升。
我認為有兩個主要原因。
第一個原因是,即使是 Java 作者也不確定新的功能元素如何集成到現(xiàn)有的 Java 生態(tài)系統(tǒng)中。
要理解這種不確定性,閱讀可選的 <T> Javadoc 就足夠了:
API
Note:Optional主要用于明確需要表示“無結(jié)果”并且使用null可能導致錯誤的方法返回類型。
API也顯示了同樣的情況:get()方法(可能拋出NPE)以及兩個orelsetrow()方法的出現(xiàn)顯然是對傳統(tǒng)命令式Java編碼風格的尊重。
第二個原因是,現(xiàn)有的Java代碼,特別是庫和框架,與函數(shù)方法不兼容——null和業(yè)務異常是慣用的Java代碼。
快進到現(xiàn)在:Java17在幾周前發(fā)布,Java11很快被廣泛采用,取代了幾年前無處不在的Java8。然而,我們的代碼看起來幾乎和7年前發(fā)布Java8時一樣。
回過頭來回答另一個重要問題可能是值得的:我們是否需要改變編寫 Java 代碼的方式? 長期以來,它為我們提供了足夠好的服務。
我們有技能、指南、最佳實踐和大量書籍來教我們?nèi)绾我赃@種風格編寫代碼。
我們真的需要改變嗎?在java培訓中,你可以學到全面系統(tǒng)的知識和技能,整體提升自己,增強自身實力,提高競爭力。
是的。我們需要提高開發(fā)性能,每一個框架、IDE、方法論、設計方法等都專注于提高軟件的實現(xiàn)和部署速度(當然,有必要的質(zhì)量標準)。然而,盡管如此,仍然沒有明顯的開發(fā)性能突破。
當然,有許多因素影響了軟件交付的速度,比如開發(fā)性能。
在我看來,大多數(shù)提高開發(fā)性能的嘗試都是假設編寫更少的代碼(通常更少的代碼)自動意味著更好的性能。流行的庫和框架,如Spring、Lombok和Faign,都試圖減少代碼量。即使是Kotlin,其創(chuàng)建也沉迷于簡潔,而不是Java的“冗長”。歷史確實多次證明這一假設是錯誤的(Perl和APL,也許是最值得注意的例子),然而,它仍然存在并推動了大部分工作。
任何開發(fā)人員都知道編寫代碼只是開發(fā)活動的一小部分。大多數(shù)時候我們都在讀代碼。閱讀更少的代碼是否更有效率?是的,但實際上,代碼的數(shù)量和可讀性幾乎沒有關(guān)系。同一代碼的讀寫通常會有不同的“阻抗”,表現(xiàn)為精神負擔。
“阻抗”中這種差異的最好例子可能是正則表達式。正則表達式非常緊湊,在大多數(shù)情況下非常容易編寫,特別是使用無數(shù)專用工具。但是,閱讀正則表達式通常是痛苦的,而且要花費更多的時間。為什么?原因是失去了背景。在java培訓中,有很多框架的學習,還有實戰(zhàn)操作項目,讓你將學到的知識真正運用到實踐中去,掌握java知識和技能。
當我們編寫正則表達式時,我們知道上下文:我們想要匹配什么,應該考慮哪些情況,可能的輸入是什么樣子,等等。表達式本身是此上下文的壓縮表示。但是當我們閱讀它們時,上下文丟失了,精確地說,使用非常緊湊的語法壓縮和壓縮了上下文。試圖從正則表達式中“解壓縮”它是一項相當耗時的任務。在某些情況下,從頭開始重寫要比試圖理解現(xiàn)有代碼花費的時間少得多。
上面的例子給出了一個重要的提示:減少代碼量只有在保持上下文的情況下才有意義。一旦減少代碼會導致上下文丟失,它就開始起反作用并損害開發(fā)性能。
實用功能Java方式
實用功能Java是解決上述問題的一種嘗試。雖然最初的目的只是通過將特殊狀態(tài)編碼為變量類型來保存上下文,但實際使用確實顯示了所采取方法的許多其他好處:
1.大大減少了導航。
2.許多錯誤從運行時轉(zhuǎn)移到編譯時,這反過來提高了可靠性并減少了必要的測試數(shù)量。
3.刪除了很大一部分樣板文件,甚至是類型聲明——更少的鍵入,更少的代碼閱讀,業(yè)務邏輯更少的技術(shù)細節(jié)。
4.明智地減少精神負擔,需要記住與當前任務無關(guān)的技術(shù)問題。
參加java培訓是入門學習的最佳選擇,有經(jīng)驗豐富的專業(yè)老師面授指導教學,通過理論結(jié)合實戰(zhàn)的方式教授java基礎(chǔ)知識,幫助你更好的理解與運用java。