关于“最终”的最终决定
在Java中,過度使用final感覺就像是SHOUTING。 在很多時(shí)候它已經(jīng)過時(shí)且不合適。
Java和JavaScript
這主要是關(guān)于Java中的final關(guān)鍵字,但是我對JavaScript中與之對應(yīng)的const看法略有變化。 我可以認(rèn)為const是一件好事,而final是一件壞事,需要進(jìn)行一些分解。
我喜歡JavaScript中的const ,因?yàn)榭偟膩碚f,使用let或var代碼往往會執(zhí)行我不同意的事情。 總體而言,變量在首次賦值后不需要重新分配。 對于累加器或某些循環(huán)情況,這不是正確的,但事實(shí)并非如此。
我提議的許多重構(gòu)都是通過公式停止再分配該臨時(shí)變量并將其委托給選擇答案并返回它的函數(shù)。
因此,我的前提是,代碼應(yīng)在很大程度上應(yīng)在所有變量默認(rèn)情況下都視為單分配的前提下工作。
那我們先執(zhí)行吧?
我們?yōu)槭裁床粦?yīng)該用Java來強(qiáng)制執(zhí)行呢?
Java的已經(jīng)有有效的最終帶來的最終好處這就需要信任結(jié)構(gòu)概念的東西是最終的 -即lambda函數(shù)和匿名內(nèi)部類。 從本質(zhì)上講,編譯器已經(jīng)知道final了,對我而言,在最終位置添加final就像喊一樣。 當(dāng)然,這會使代碼更加繁忙……少即是多, final感覺就像人滿為患。
我會原諒JavaScript中的const ,部分原因是linter非常熱衷于推斷const ,然后再要求它,部分原因是JavaScript是一種寬松的語言,如果不牢固地表達(dá)它,您將無法信任任何內(nèi)容。 就是說,我寧愿不需要它!
我們?nèi)绾涡湃巫约?#xff1f;
是的,但是如果我不說某件事是final ,我怎么知道某事確實(shí)是final的。 如果有人更改了該怎么辦?
范例A:
public bool isFound(List<String> list, String value) { for ( final String item:list) { if (value.equals(item)) { return true ; } } return false ; }上面的代碼保證了循環(huán)內(nèi)的item無法重新定義。 第一位–誰在乎!? 2號–方法非常簡短。 如果忍者出現(xiàn)并試圖改變item的價(jià)值,您會發(fā)現(xiàn)它的功能簡短。
這就是重點(diǎn)。 如果您的功能非常短,并且使代碼保持模塊化,則可以看到發(fā)生了什么。 您不會感到意外,并且可以發(fā)現(xiàn)變化的變量與沒有變化的引用。
范例B:
final boolean hadValue = isFound(myList, "Foo" ); final boolean hadOtherValue = isFound(myList, "Bar" ); final boolean bothFound = hadValue && hadOtherValue; final String message = "They were both " + bothFound ? "found" : " not found" ; return message;打哈欠!
boolean bothFound = isFound(myList, "Foo" ) && isFound(myList, "Bar" ); return "They were both " + bothFound ? "found" : " not found" ;別讓我跟著你的思維過程,只用final一個(gè)字作為調(diào)味料。 使代碼中的句子解釋整個(gè)思想,并僅在需要時(shí)添加變量和修飾符。
決賽進(jìn)入哪里?
我明智地使用final 。 我應(yīng)該說,我在類內(nèi)部將Spring組件中所有bean組件/服務(wù)的所有子服務(wù)都設(shè)為private final ,但我沒有。 有一個(gè)爭論,那就是應(yīng)用程序上下文中服務(wù)的連接本質(zhì)上是不可變的,但我傾向于不是這樣。 如果您這樣做,我不會爭論。
我有兩個(gè)關(guān)鍵用例,其中final是必須的!
他們都是關(guān)于呼喊和不變性的重要性。
- 全局常量必須這樣標(biāo)記
- 實(shí)施不變模式需要final并且也應(yīng)標(biāo)有路標(biāo)
因此,您總是會發(fā)現(xiàn)我在類內(nèi)部使用的類級常量或全局變量中使用private static final SomeType SOME_CONSTANT_IN_CAPITALS ,因?yàn)樗鼈兪翘厥獾?#xff0c;必須被視為具有額外保護(hù)的常量–約定很強(qiáng),并且存在危險(xiǎn)虐待比單個(gè)函數(shù)中的局部變量高得多。
您會發(fā)現(xiàn)我想要正確實(shí)現(xiàn)不變模式。
學(xué)習(xí)過求職面試并知道final也可以防止事情被壓倒的人在這個(gè)階段可能會感到自鳴得意,直到我說我對使用它并不真正感興趣。 如果您試圖阻止程序員具有靈活性,或者試圖通過使final滿足要求而滿足checkstyle或Sonar的要求,那就加油!
但是,如果您出于某些原因想要真正的不可變對象,那么我向您致敬。
結(jié)論
當(dāng)我開始寫存儲在緩存中并由多個(gè)線程共享的不可變數(shù)據(jù)對象時(shí),您將無法阻止我final完成它。
我將在每周的每一天將您的記錄器和您的參考數(shù)據(jù)移動到static final BLOCK_CAPITAL_NAME 。
不過,最重要的是: 用“”替換所有“最終”仍然是我做過的最令人滿意的一些重構(gòu)。
翻譯自: https://www.javacodegeeks.com/2019/08/final-word-final.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的关于“最终”的最终决定的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 盘点iPhone 15“借鉴
- 下一篇: GitLab 发布安全更新修复窃取信息漏