Java社区调查结果:74%的开发人员希望减少详细程度
一個(gè)新的JDK增強(qiáng)建議(JEP)在Java社區(qū)中風(fēng)起云涌:JEP286。該建議建議在Java的未來(lái)版本中引入局部變量類(lèi)型推斷,以簡(jiǎn)化Java應(yīng)用程序的編寫(xiě)。
在下面的文章中,我們將解釋它的含義以及它將如何影響您的代碼。
新帖:Java社區(qū)調(diào)查結(jié)果:74%的開(kāi)發(fā)人員希望減少詳細(xì)程度https://t.co/TtxVBiqFAj pic.twitter.com/TEs0VtFnpD
— Takipi(@takipid) 2016年4月13日
提案
新的語(yǔ)言功能建議在Java中添加一些語(yǔ)法糖—簡(jiǎn)化它并改善開(kāi)發(fā)人員的體驗(yàn)。 新語(yǔ)法將減少與編寫(xiě)Java相關(guān)的儀式,同時(shí)保持對(duì)靜態(tài)類(lèi)型安全性的承諾。
換句話(huà)說(shuō),您無(wú)需指定關(guān)聯(lián)的類(lèi)型就可以聲明變量。 Oracle聲明該新功能將允許例如以下聲明:
var list = new ArrayList<String>(); val stream = getStream();那將替換當(dāng)前的語(yǔ)法:
List<String> list = new ArrayList<String>(); final Stream<String> stream = getStream();如您所見(jiàn),Local Variable Type Inference將允許使用var關(guān)鍵字,而不是指定變量的類(lèi)型。
眾所周知,Java有點(diǎn)冗長(zhǎng),在閱讀和理解您或另一個(gè)開(kāi)發(fā)人員在編寫(xiě)函數(shù)時(shí)所想到的內(nèi)容時(shí),這非常有用。 對(duì)于那些一直認(rèn)為這有點(diǎn)乏味的人來(lái)說(shuō),該提案標(biāo)志著重大的改變。
該建議與Java 9無(wú)關(guān),Java 9已經(jīng)在制定中,并且還將改變您的編碼方式 。
去JEP還是不去JEP?
幾周前,Oracle Java語(yǔ)言架構(gòu)師Brian Goetz 發(fā)布了這項(xiàng)新建議的調(diào)查結(jié)果 。 主要問(wèn)題是:“您總體上對(duì)擬議的局部變量類(lèi)型推斷功能有何看法?”。 2,453個(gè)開(kāi)發(fā)人員回答,結(jié)果我們基本上是肯定的:
您如何看待建議的局部變量類(lèi)型推斷功能?
該調(diào)查的第二部分著眼于未來(lái)的語(yǔ)法,根據(jù)其他語(yǔ)言(例如C#,Scala,Swift,C ++或使用let)的類(lèi)似用法,建議了5種選擇。 大多數(shù)用戶(hù)選擇var / val選項(xiàng):
可能的語(yǔ)法選項(xiàng)
即使大多數(shù)用戶(hù)認(rèn)可此新選項(xiàng),但閱讀注釋部分仍會(huì)顯示開(kāi)發(fā)人員贊成此更改,要求Oracle“與時(shí)俱進(jìn)”,指出此更改應(yīng)僅適用于val,甚至要求更多更改,例如作為多行字符串。
我的生日只有幾個(gè)星期,但這是有史以來(lái)最好的禮物之一! https://t.co/QVtXwUPwEG
原聲帶: https : //t.co/dIpLKLFFEE
— Erik Meijer(@headinthebox) 2016年3月10日
反對(duì)該建議的開(kāi)發(fā)人員聲稱(chēng),對(duì)于那些剛開(kāi)始使用Java的人來(lái)說(shuō)可能會(huì)很困難,或者指出現(xiàn)有語(yǔ)法是“冗長(zhǎng)和易讀性的正確組合”,而“ diamond運(yùn)算符是一個(gè)不錯(cuò)的選擇。行動(dòng)”,與目前的提案不同。
不要責(zé)怪語(yǔ)言功能使開(kāi)發(fā)人員編寫(xiě)糟糕的代碼。 責(zé)怪卑鄙的開(kāi)發(fā)者! JEP286是Java #var #val的“偉大”東西
— Simon Maple(@sjmaple) 2016年3月13日
這種變化來(lái)自何處?
關(guān)于Java的最常見(jiàn)的抱怨之一是編寫(xiě)Java所需的樣板代碼數(shù)量。 可以用其他語(yǔ)言(如C ++,C#,Scala和Go)用一行代碼編寫(xiě)幾行Java代碼。
盡管類(lèi)型推斷不是Java中的新概念,但它是局部變量的新概念。
它是在Java 7中(作為Project Coin的一部分)通過(guò)菱形運(yùn)算符(<>)引入的,該運(yùn)算符允許在不使用類(lèi)型綁定ArrayList <>的情況下初始化列表,而在Java 8中使用Lambda Formals進(jìn)行引入。 例如,使用菱形運(yùn)算符可以編寫(xiě)以下代碼:
List<String> list = new LinkedList<String>();當(dāng)然, 在JEP 286摘要頁(yè)面上,您可以從Oracle找到以下添加新功能的理由:
“ Java幾乎是唯一不包含局部變量類(lèi)型推斷的流行的靜態(tài)類(lèi)型語(yǔ)言。 在這一點(diǎn)上,這不再是一個(gè)有爭(zhēng)議的功能”
這將如何影響您的代碼?
Oracle知道社區(qū)可能需要一些時(shí)間來(lái)適應(yīng)和接受這一新建議。 雖然尚不清楚JEP 286是否以及何時(shí)在將來(lái)的Java版本中成為現(xiàn)實(shí),但這足以使社區(qū)中的一些開(kāi)發(fā)人員大聲疾呼。
如果您是這些開(kāi)發(fā)人員之一,那么您將很高興得知此處理方法僅限于:
- 帶有初始化器的局部變量
- 增強(qiáng)的for循環(huán)中的索引
- 在傳統(tǒng)的for循環(huán)中聲明的本地人
Oracle 聲明它將不適用于:
- 方法參數(shù)
- 構(gòu)造函數(shù)參數(shù)
- 方法返回類(lèi)型
- 領(lǐng)域
- 捕獲形式(或任何其他類(lèi)型的變量聲明)
由于Java承諾支持Java的早期版本,因此我們可以假定它不會(huì)破壞向后兼容性。
在家嘗試一下
Takipi的我們總是喜歡在新產(chǎn)品上市之前嘗試它們,而JEP 286正是這樣。 如果您對(duì)JEP 286沒(méi)意見(jiàn),可以立即自己檢查一下。
作為采用OpenJDK計(jì)劃的一部分,Richard Warburton和Raoul-Gabriel Urma公開(kāi)發(fā)布了具有JEP 286支持的Open JDK的非正式版本 。 這樣,您就可以嘗試這些新功能,了解JEP 286的全部?jī)?nèi)容,并在實(shí)際操作中體會(huì)到它。
想嘗試#Java的類(lèi)型推斷嗎? @raoulUK和我為JEP 286設(shè)置了二進(jìn)制文件,因此您可以嘗試使用https://t.co/0YqnoguqTe
—理查德·沃伯頓(RichardWarburto) 2016年3月13日
最后的想法
這項(xiàng)新提議正在Java社區(qū)中引起轟動(dòng),引起了很多關(guān)注。 您現(xiàn)在可以測(cè)試新功能的事實(shí)將幫助開(kāi)發(fā)人員認(rèn)識(shí)到Java的未來(lái)可能掌握的東西。
重要的是要記住,這是一個(gè)較早的建議,目前還不清楚Oracle是否會(huì)實(shí)施它。 因此,我們鼓勵(lì)您參與將來(lái)的調(diào)查,并積極參與本JEP和其他將來(lái)與Java相關(guān)的功能。
翻譯自: https://www.javacodegeeks.com/2016/04/java-community-survey-results-74-developers-want-less-verbosity.html
總結(jié)
以上是生活随笔為你收集整理的Java社区调查结果:74%的开发人员希望减少详细程度的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: y81s刷机包(Vivo Y81s刷机)
- 下一篇: 电脑增加旧机械硬盘(电脑增加旧机械硬盘怎