0
本文作者: 三川 | 2017-01-11 15:54 |
Java 在程序猿江湖的霸主地位已經(jīng)很多年沒(méi)有受到挑戰(zhàn)了。
作為一門主流編程語(yǔ)言,在所有領(lǐng)域的普及率、職業(yè)選擇、業(yè)界傾向榜單中,Java 即使不在榜首,也位于前列。即便是 Python 為王的機(jī)器學(xué)習(xí)領(lǐng)域,Java 的普及程度也穩(wěn)居第二、三位,僅有 R 語(yǔ)言可與之相比。Java 能有如此巨大的成功,跟它的靈活多功能,以及處理復(fù)雜任務(wù)的能力是分不開的。但有沒(méi)有比 Java 更好的選擇呢?
就雷鋒網(wǎng)所知,在資深程序猿眼中,能替代 Java、并且能做得比它更好的只有 Scala。這篇文章并不是對(duì) Scala 平白無(wú)故的吹捧文,而是基于:
大家知道 Scala 在業(yè)內(nèi)的口碑不錯(cuò);
作為一個(gè)后起之秀,它解決了 Java 普遍存在的許多問(wèn)題;
另一方面, Scala 的性能比 Java 更加強(qiáng)大;
上期盤點(diǎn)中,我們還發(fā)現(xiàn),在機(jī)器學(xué)習(xí)領(lǐng)域,2014 年后 Scala 在美國(guó)的招聘需求出現(xiàn)井噴,是發(fā)展最快的機(jī)器學(xué)習(xí)開發(fā)語(yǔ)言(詳見 Python、R、Java、 C++ 等:從業(yè)界反饋看機(jī)器學(xué)習(xí)語(yǔ)言趨勢(shì))。
但是,作為一門新興語(yǔ)言,國(guó)內(nèi)對(duì)于 Scala 的認(rèn)識(shí)較少。下面,來(lái)看看國(guó)外移動(dòng)游戲開發(fā)商 Nimblechapps 的創(chuàng)始人兼 CEO Keval Padia,總結(jié)的 Scala 優(yōu)于 Java 的五大理由:
Nimblechapps 的 logo
如果你是一個(gè)業(yè)余開發(fā)者,不存在項(xiàng)目市場(chǎng)、成本方面的考慮,對(duì)這一條 Scala 的優(yōu)點(diǎn)或許你并不感冒。但對(duì)于所有領(lǐng)工資的開發(fā)者,必須要在規(guī)定時(shí)間內(nèi)把產(chǎn)品投放市場(chǎng)。這是一個(gè)沒(méi)有爭(zhēng)議的、Scala 優(yōu)于 Java 的領(lǐng)域。對(duì)于 Scala,OO(面向?qū)ο螅┠J皆趫?zhí)行代碼時(shí)的限制并不存在。在這一模式之外,還能為算法加入函數(shù)式編程。這使得原本兩個(gè)世界——面向?qū)ο笳Z(yǔ)言和函數(shù)式語(yǔ)言的優(yōu)點(diǎn)能被結(jié)合起來(lái)。這產(chǎn)生的結(jié)果是具有非凡表達(dá)力的細(xì)節(jié)和簡(jiǎn)潔明了的代碼——經(jīng)常只有幾行。更少的代碼行數(shù)在所有方面都提高了速度,不管是測(cè)試還是開發(fā)。
作為一名碼農(nóng),你也許經(jīng)常在編程中遇到出現(xiàn)死鎖的情況。最可怕的空指針異常(null pointer exception)以及其它變種,就是很好的例子
Scala 能提供一個(gè)直截了當(dāng)?shù)慕鉀Q方案嗎?不能。但它提供了一些能事先避免死鎖的、十分有效的選擇。當(dāng)你開始用 Scala 寫代碼,你一定會(huì)注意到空指針異常出現(xiàn)的次數(shù)比 Java 大幅減少。
首先,函數(shù)式編程能幫助你的 app 提高穩(wěn)定性,并且?guī)ё吆芏啾緹o(wú)意產(chǎn)生的副產(chǎn)品。當(dāng)你從可變數(shù)據(jù)結(jié)構(gòu)( mutable data structures)轉(zhuǎn)移至所謂的函數(shù)式模式,你會(huì)保證更高的安全性、穩(wěn)定性。
第二點(diǎn),沒(méi)有標(biāo)點(diǎn)的代碼會(huì)變成更強(qiáng)。Scala 的代碼支持混合能力和多種繼承(inheritances)這會(huì)幫助你找出代碼中的漏洞、缺陷。更干凈、強(qiáng)大的代碼幫助開發(fā)者提升終端應(yīng)用的安全和表現(xiàn)。
所有開發(fā)者都需要為 app 加入功能。如今,這有兩種方式:白手起家從頭寫代碼,或者從第三方應(yīng)用中移植過(guò)來(lái)?,F(xiàn)在程序架構(gòu)師都需要走過(guò)這個(gè)關(guān)鍵路口——決定到底是自己開發(fā)整個(gè)功能,還是直接拿來(lái)一個(gè)插件。
但其實(shí)還有第三種方式:Scala 提供了一個(gè)更強(qiáng)大的解決方案:它搭載了多種寶貴的內(nèi)置功能。由于這一點(diǎn),你對(duì)自己的應(yīng)用有遠(yuǎn)遠(yuǎn)更好的控制力。Scala 簡(jiǎn)單、直接的代碼也能夠提升載入速度。
不同于 Java,Scala 為傳遞異步行為(asynchronous behavior)而設(shè)計(jì)。未來(lái)就緒(future readiness)在 Java 的缺失,導(dǎo)致了一系列限制了應(yīng)用功能的妥協(xié)。但就像其他網(wǎng)絡(luò)開發(fā)框架一樣,Scala 中的異步行為提供了非常舒服、自然的代碼。
看了這五大優(yōu)點(diǎn),你是否已經(jīng)準(zhǔn)備拿 Scala 試試手了呢?但雷鋒網(wǎng)要提醒讀者們,不要期望太高。比如說(shuō),它在國(guó)內(nèi)的大環(huán)境并不理想,使用 Scala 的人太少,工作機(jī)會(huì)比國(guó)外少得多。對(duì)于個(gè)體而言,它也并不適合每個(gè)人。大牛 David Pollak 曾經(jīng)表示:“對(duì)于50%的Java開發(fā)者,學(xué)習(xí)Scala的難度高于它帶來(lái)的便捷。”在早年的博客中,他反復(fù)強(qiáng)調(diào) Scala 是一個(gè)面向聰明人的語(yǔ)言,是一個(gè)給熱愛(ài)寫代碼的人充分發(fā)揮自己才能的平臺(tái)。
換句話說(shuō),Scala 難以在大眾開發(fā)者群體之間推廣。但近兩三年來(lái),全世界已經(jīng)目睹美國(guó)掀起的 Scala 風(fēng)潮。雖然作為游戲公司的 CEO,Keval PadiaScala 只是從手機(jī)端 app 開發(fā)的角度看待 Scala;但在機(jī)器學(xué)習(xí)領(lǐng)域,Scala 也已獲得相當(dāng)多自認(rèn)天賦不凡的極客作為擁躉。
至于在將來(lái),Scala 能否在國(guó)內(nèi)高端開發(fā)者社區(qū)對(duì) Java 形成沖擊,雷鋒網(wǎng)將拭目以待。
via jaxenter
相關(guān)文章:
入門必讀 機(jī)器學(xué)習(xí)六大開發(fā)語(yǔ)言
Python、R、Java、 C++ 等:從業(yè)界反饋看機(jī)器學(xué)習(xí)語(yǔ)言趨勢(shì)
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。