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