目前,計算機(jī)語言的總數(shù)總計達(dá)9000種。但是,其中只有50種編程語言是較為流行的。今天,小編就給大家盤點(diǎn)一下2020年最受歡迎的編程語言。
10年積累的成都做網(wǎng)站、網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有集安免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
1、Python
Python是目前開發(fā)人員比較常用的編程語言之一。有很多大企業(yè)都選擇Python進(jìn)行產(chǎn)品開發(fā),比如:NASA,Google,Instagram,Spotify,Uber,Netflix等,而且很奇妙的一點(diǎn)是,無論是初學(xué)者還是專業(yè)人員,都很喜歡Python,由此可見它的受歡迎程度。如果你是大數(shù)據(jù)職業(yè)的技術(shù)專業(yè)人員,那么Python可以說是最合適的。
2、R
R是一種可以輕松連接到數(shù)據(jù)庫管理系統(tǒng)(DBMS)的語言,但其實它本身不提供任何電子表格數(shù)據(jù)視圖。不過,R語言最大的特點(diǎn)是為數(shù)據(jù)表示提供了多種圖形功能,例如條形圖,餅圖,時間序列,點(diǎn)圖,3D表面,圖像圖,地圖,散點(diǎn)圖等。R語言可以幫助用戶很容易地自定義圖形,并開發(fā)有特點(diǎn)的新奇的圖形。
3、Java
Java出現(xiàn)之后,它就以其在數(shù)據(jù)科學(xué)技術(shù)中的多功能性而廣為人知。而且,用于處理和存儲大數(shù)據(jù)應(yīng)用程序的開源框架Hadoop HDFS已完全用Java編寫。Java還被廣泛用于構(gòu)建各種ETL應(yīng)用程序,例如Apache,Apache Kafka和Apache Camel等,這些應(yīng)用程序用于運(yùn)行數(shù)據(jù)提取,數(shù)據(jù)轉(zhuǎn)換以及在大數(shù)據(jù)環(huán)境中的加載。
4、Scala
Scala是一種開源高級編程語言,目前主要是金融行業(yè)在著重使用。Scala的一個最大的特點(diǎn),是能夠保證其在大數(shù)據(jù)可用性方面的重要性??傊珹pache Spark是用于大數(shù)據(jù)應(yīng)用程序的集群計算框架,大數(shù)據(jù)從業(yè)者一般都需要具備Scala相關(guān)的豐富的知識和操作經(jīng)驗。
5、Kotlin
Kotlin是一款很不錯的的Android應(yīng)用開發(fā)語言,可以在JVM上運(yùn)行,在一定程度上克服了Java的某些缺點(diǎn),提供許多現(xiàn)代功能。Kotlin的主要特點(diǎn)在于它的語言設(shè)計,它提供了優(yōu)秀的指針、安全性、類型推斷等功能?,F(xiàn)有Java庫龐大的生態(tài)系統(tǒng)都可供Kotlin使用,因為Kotlin也運(yùn)行在JVM中。
kotlin是一門現(xiàn)代的編程語言呢,這門編程語言的設(shè)計符合很多現(xiàn)代編程語言的思維。簡化編程語言,提升開發(fā)效率,跨平臺開發(fā),空安全,類型轉(zhuǎn)換,協(xié)程,函數(shù)式編程,兼容龐大的資源庫,工具友好等等。
這些特點(diǎn),是新一代的編程語言的追求的特色。比如說Go,Swift等。kotlin是這一輪新的編程語言的大潮中,綜合實力非常突出的佼佼者。
可用于開發(fā)跨平臺的應(yīng)用。kotlin是一門真正全棧式的編程語言,可以開發(fā)web,Socket,安卓,js,NativeApp等。投資這門編程語言的收益率,太高了。
然后,它是一門靜態(tài)編譯型的編程語言。在很多專業(yè)的評測當(dāng)中,性能基本跟原生Java相當(dāng)。但是,某些項目會更省內(nèi)存。使用Kotlin開發(fā)安卓,app的體積大約會增加1MB。
最后,與java和android 100%可互相操作。由于跟java一樣,基于JVM引擎生成字節(jié)碼,所以kotlin跟java和android,那是100%兼容的。說白一點(diǎn),kotlin可以拿所有java的資源來用,干所有java能干的活,然后能比java干的更好。
函數(shù)式語言
Elixir
Elixir 比 Erlang 更容易編寫,具有 Haskell 等語言的函數(shù)式編程概念。Elixir是基于Erlang 虛擬機(jī)的,其廣為人知的特點(diǎn)是運(yùn)行低延時、分布式、可容錯的系統(tǒng),并成功用于Web開發(fā)與嵌入式軟件領(lǐng)域。
Elm
Elm是一種用于構(gòu)建 Web 應(yīng)用程序的函數(shù)式語言。業(yè)內(nèi)一般認(rèn)為,它適用于創(chuàng)建高可交互應(yīng)用,例如復(fù)雜的用戶界面,開發(fā)人員可以通過 Elm 快速編寫富有表現(xiàn)力的系統(tǒng)。Elm 也以沒有運(yùn)行時異常而聞名。
PureScript
PureScript是一種可編譯為 JavaScript 的純函數(shù)式編程語言。與 Haskell 最相似的是,PureScript 最適合用于開發(fā) Web 應(yīng)用程序和服務(wù)器端應(yīng)用程序。
PureScript 支持類型推斷,與其他語言相比,需要明顯類型注釋要少得多。
Swift
Swift是一種由蘋果公司開發(fā)的通用編譯編程語言,最早的設(shè)想是替代上一代編程語言O(shè)bjective-C ,過程中結(jié)合了Objective-C、Rust、Ruby 和 Python等語言的編程思想。目前Swift用于開發(fā)蘋果自己的手機(jī)、服務(wù)器、臺式機(jī)上的應(yīng)用軟件。
程序語言
Go
Go語言是由谷歌公司創(chuàng)造的類似C風(fēng)格的語言。Go 比 C++ 或 Java 更簡潔,比 Ruby 或 Python 更安全。
一些缺點(diǎn): 編碼要求嚴(yán)格。比如,不能混用符號和無符號整數(shù)。還有一個明顯的遺漏,Go語言沒有泛型和繼承。
但Go語言的優(yōu)勢同樣明顯,簡單且易于使用。Go語言擅長于網(wǎng)絡(luò)和多線程方面的編程。
面向?qū)ο笳Z言
DART
Dart同樣來自谷歌公司具有C語言風(fēng)格。Dart可以輕松編寫JavaScript、Java for Android、本地機(jī)器代碼或獨(dú)立的 Dart 虛擬機(jī)。它還可以運(yùn)行后端代碼。
Dart 非常適合使用事件驅(qū)動代碼構(gòu)建用戶界面。根據(jù)Dart 團(tuán)隊成員的說法,Dart的優(yōu)勢:可選的靜態(tài)類型、最小的編譯時錯誤和強(qiáng)大的內(nèi)置編輯器。
Pony
Pony是一種基于無數(shù)據(jù)競爭類型和垃圾收集的語言,并使用 actor 模型以及稱為引用功能的東西。
你可以把 Pony 想象成某種“Rust 遇上 Erlang”的復(fù)合體,沒有鎖,高并發(fā)是其主要優(yōu)點(diǎn)。
Pony 的缺點(diǎn)是 API 穩(wěn)定性低、很少有高質(zhì)量的第三方庫和有限的本地工具。
TypeScript
TypeScript是一個基于 JavaScript 靜態(tài)類型定義構(gòu)建,并由微軟維護(hù)且開源編程語言。Visual Studio Code 或Visual Studio 是推薦的IDE編輯器,微軟大廠的用戶體驗和錯誤檢查也不用懷疑。
復(fù)合編程語言
Hack
Hack是一種作為 PHP 方言的 HipHop 虛擬機(jī)的編程語言。于 2014 年由Facebook創(chuàng)建,允許程序員同時使用靜態(tài)和動態(tài)類型(也稱為漸進(jìn)類型),這為編碼提供了靈活性。
Julia
Julia是一種高級通用編程語言,用于計算科學(xué)和數(shù)值分析。Julia 以動態(tài)類型和可重現(xiàn)的高性能特性而聞名。
Julia 在數(shù)據(jù)可視化和機(jī)器學(xué)習(xí)等方面都有大量用途。事實上,它被英國保險公司 Aviva 用于風(fēng)險計算,紐約聯(lián)邦儲備銀行用于金融建模,甚至氣候建模聯(lián)盟用于氣候變化建模。它擁有Fortran、C++、R、Java、C 、Python等的接口,這使其成為最受追捧的新語言之一。
Kotlin
Kotlin是運(yùn)行在 Java 虛擬機(jī)中的更快、更流暢的 Java 版本。它現(xiàn)在是Android 開發(fā)的首選語言。根據(jù) Android 開發(fā)者網(wǎng)站顯示,程序員正轉(zhuǎn)而采用 Kotlin,因為該語言的樣板代碼更少,空指針異常更少,并且與 Java 有互操作性。
Kotlin 可用于在 iOS 和 Android 上運(yùn)行的應(yīng)用程序、不使用額外運(yùn)行時或虛擬機(jī)。
Nim
Nim是一種優(yōu)先考慮可讀性的靜態(tài)類型語言。通過結(jié)合多種語言的特性,Nim 為程序員提供了速度和易用性。
它帶有 JavaScript 后端、分散的包管理、自動內(nèi)存管理、C 和 C++ 庫的綁定以及用于調(diào)試的回溯。作為一種語言,Nim 是有限的,但它包含一組元編程功能,如泛型、模板和宏,因此開發(fā)人員可以在避免冗長代碼的同時以不同的風(fēng)格工作。
OCaml作為此列表中較舊的語言,OCaml是一種多范式語言——既有函數(shù)式、命令式和類型安全,也具有面向?qū)ο蠊δ堋?/p>
OCaml 的一些優(yōu)勢:定義數(shù)據(jù)類型很容易。默認(rèn)情況下,所有變量都是不可變的。API 穩(wěn)定,具有良好的庫向后兼容性。該語言還為獨(dú)立應(yīng)用程序提供自動內(nèi)存管理和單獨(dú)編譯。
Reason
如果比JavaScript 更快、更簡單且類型安全會怎樣?
這就是創(chuàng)建Reason的 Facebook 開發(fā)者想要回答的問題。不過,他并沒有從頭開始構(gòu)建一種新語言,而是采用了 OCaml,并將其調(diào)整為類似于 JavaScript。
Reason使用項目 BucketScript編譯為 JavaScript,并且可以訪問 80% 的 JavaScript 工具和生態(tài)系統(tǒng)。它還可以編譯為準(zhǔn)系統(tǒng)、iOS、Android 和微控制器。
Red
Red是一種最初旨在克服 Rebol 語言限制的編程語言。Red 于 2011 年推出,受 Rebol、Lua 和 Scala 等語言的影響,對高級和低級編程都很有用。
該語言可用于開發(fā)從高級 GUI 到低級操作系統(tǒng)的所有方面。Red 擁有人性化的語法、低內(nèi)存占用和垃圾收集等優(yōu)點(diǎn)。
Rust
Rust解決了一些與 Go 相同的問題,如系統(tǒng)級別的線程和進(jìn)程安全,,但Rust 更像 C 風(fēng)格的語法
但Rust語言的缺點(diǎn):靜態(tài)類型和缺乏垃圾收集
Rust可直接訪問內(nèi)存意味著程序員可以編寫低級代碼,如操作系統(tǒng)內(nèi)核。Rust 也非常適合嵌入式設(shè)備、網(wǎng)絡(luò)服務(wù)和命令行編寫。
總體說, 對于大部分普通程序員, 可算比較完美了(綜合考量語言自身\平臺及庫\IDE等工具\(yùn)背后支持公司). 目前主要風(fēng)格還是偏OO, 如果可以再偏FP一點(diǎn)會更好. 像是一個Scala與C#的合體, 比Scala簡單得多; 比C#更干凈, 因為沒有歷史包袱. 我多多少少寫過代碼的語言超過10種, Kotlin與F#是感覺最舒適的, 另外Kotlin是少有的和Go/Python一樣寫代碼時不需要程序員動腦的語言, 很適合開發(fā)普通項目.與Scala有根本設(shè)計思路上的不同, Scala是一切盡量自己來, 實在不夠用了再用java的; Kotlin是盡量用Java的, 不夠用了再擴(kuò)展, 尤其體現(xiàn)在二者的容器庫上, 導(dǎo)致Kotlin的學(xué)習(xí)曲線極低, 這對于我這樣的普通碼農(nóng)是一大優(yōu)點(diǎn), 而高手們可能更看重Scala強(qiáng)大的容器庫和完備的FP功能, 所以個人估計它很難吸引Scala程序員.比較喜歡的幾點(diǎn):既有FP的everything is an expression風(fēng)格, 可以直接用if等表達(dá)式賦值, 又可以用label控制return, 使得return可以用于lambda中, 進(jìn)而在lambda中使用衛(wèi)述句直接return, 減少巢式嵌套, 這點(diǎn)做的比Scala漂亮. 我個人非常喜歡使用衛(wèi)述句, 一直為不能在FP語言中用衛(wèi)述句而感到遺憾, Kotlin很好的解決了這個問題.可以像F#/Go一樣直接在package內(nèi)寫函數(shù), 不需要所有東西都放進(jìn)一個object/class之類的, 代碼看著很舒服. 說起來, Kotlin的設(shè)計定位有點(diǎn)像jvm下的Go, 追求簡潔實用, 但比Go好用(主要在泛型/FP兩方面). 目前雖然沒有自己的actor庫, 但可以用akka, 這點(diǎn)就顯示出jvm的多語言群毆優(yōu)勢了.目前編譯器和插件還不如Scala的成熟, idea下曾碰到過IDE內(nèi)部錯誤之類的問題, 自動完成也經(jīng)常出問題, 不過實際影響很小. 另外比較意外的是沒有union而一定要用data class或Pair/Triple, 也沒有type alias, 原來代碼里用的太多, 改起來有點(diǎn)煩, 但想一想Scala的編譯時間和類型系統(tǒng), 忍了吧.估計會先在Android上開始流行, 慢慢擴(kuò)展到server端. 但要達(dá)到Scala目前的流行程度, 短期內(nèi)是不可能了, 希望今年能出1.0.以后有新感想了再說2015.06.01補(bǔ)充一段其設(shè)計者對于集合庫的說明:“Scala 的經(jīng)驗表明,有自己的集合庫 — 總的來說很不錯 — 可以帶來明顯優(yōu)勢,但在需要與Java代碼互操作時也存在缺點(diǎn):所有數(shù)據(jù)都需要轉(zhuǎn)換/包裝,因此代碼有點(diǎn)難看,性能有時會大打折扣。鑒于此,Kotlin采用了另一種策略:我們使用簡單的Java集合,但通過提取“虛擬”只讀接口并引入聲明位置變量使它們有不俗的表現(xiàn)。這樣,既可兼顧兼容性,又可得到一個好用的庫。Kotlin 依賴于Java庫,但可以增強(qiáng)Java庫的功能,主要是通過擴(kuò)展,但有時使用編譯器支持的技術(shù)(集合/數(shù)組/基元),這在保證兼容性的同時保持了語言的純凈.” -- Andrey
Kotlin的優(yōu)勢很明顯,因為JVM是宇宙第一運(yùn)行時
Kotlin的劣勢也非常明顯,就是基于宇宙第一運(yùn)行時。JVM吃內(nèi)存的問題這輩子感覺是沒希望解決了
為什么說 Kotlin 是優(yōu)秀的
本文不會像一般介紹語言的文章那樣,一開頭就羅列出語言那些酷炫的特性,我們稍后再來探討這些內(nèi)容。
首先我將介紹一些其它的信息,因為2013 年一項研究顯示,當(dāng)開發(fā)者評估一種編程語言時生態(tài)系統(tǒng)要比語言特性更重要。這符合我個人的經(jīng)驗,下面就讓我開始介紹吧:
Kotlin 被編譯成 JVM 字節(jié)碼或者 JavaScript 代碼。Java 開發(fā)者將會是對它最感興趣的人,不過對于使用垃圾收集運(yùn)行時語言的開發(fā)者而言它也具有一定的吸引力,比如 Scala、Go、Python、Ruby 和 JavaScript 等語言。
Kotlin 來自業(yè)界,而不是學(xué)術(shù)界。它解決了開發(fā)者現(xiàn)今面臨的實際問題。例如它的類型系統(tǒng)可以幫助你避免空指針異常。
切換到 Kotlin 無需成本!它是開源的但這不是重點(diǎn),重點(diǎn)是它提供了一個高質(zhì)量的一鍵從 Java 轉(zhuǎn)換到 Kotlin 的工具,并且十分關(guān)注 Java 二進(jìn)制文件的兼容性。你可以將現(xiàn)有 Java 項目的一次性轉(zhuǎn)換成 Kotlin 項目,而該項目仍將可以正常編譯,即使這是一個包含上百萬行代碼的復(fù)雜程序。
顯然你可以從上文得知,Kotlin 程序能夠使用所有現(xiàn)存的 Java 框架和庫,甚至那些依賴注解處理的高級框架。它們之間的交互是無縫的,不需要包裝或者適配層。Kotlin 可以整合 Maven,Gradle 以及其它構(gòu)建系統(tǒng)。
它十分平易近人,語法精煉直觀,僅僅是閱讀語言參考文檔幾個小時就能學(xué)會使用。Kotlin 看起來十分像 Scala 但是更加簡潔并且兼顧了可讀性。
它不遵循特定的編程哲學(xué),例如極度的函數(shù)式編程或者面向?qū)ο缶幊田L(fēng)格。
它不會增加運(yùn)行時的開銷。Kotlin 的標(biāo)準(zhǔn)庫十分小巧緊湊:專注于擴(kuò)展 Java 標(biāo)準(zhǔn)庫,編譯階段的大量內(nèi)聯(lián)操作意味像 map/filter/reduce 等管道結(jié)構(gòu)函數(shù)將被編譯成類似于命令式語言的代碼。
Anko 與 Kovenant 等框架的出現(xiàn)意味著在 Android 開發(fā)者中 Kotlin 開始變得流行起來。如果你正在從事 Android 相關(guān)的工作,相信你很快就會獲得好的工作。你可以閱讀這份 Square 公司開發(fā)者 JakeWharton 的報告,了解用 Kotlin 進(jìn)行 Android 開發(fā)的體驗。
Kotlin 允許你繼續(xù)使用你的工作效率提升工具。IntelliJ 的 IDE 對 Kotlin 的支持十分完善:你可以對代碼進(jìn)行重構(gòu)、搜索、導(dǎo)航以及使用自動完成,而且 IDE 充分支持調(diào)試、單元測試、性能分析等等功能。
除了 Android,我認(rèn)為 Kotlin 還非常適用于企業(yè)中 Java 的應(yīng)用場景。如果你的工作是整天埋頭于大公司的代碼庫中,那么當(dāng) Kotlin 1.0 版本正式發(fā)布時你應(yīng)該盡快去了解一下:
由知名公司為它提供強(qiáng)大的商業(yè)支持。 JetBrains 這家公司 有一個高度稱職的大團(tuán)隊致力于該項目,有穩(wěn)定的商業(yè)模式甚至在自己的部分旗艦產(chǎn)品中使用 Kotlin,這表明短期內(nèi) Kotlin 不會被放棄。
使用 Kotlin 風(fēng)險較低:可以由一兩個感興趣的團(tuán)隊成員在項目中小范圍的試驗 Kotlin,這并不會擾亂你的項目,因為 Kotlin 的類對外提供的 Java API 看起來就與普通的 Java 代碼一樣。
因為 Kotlin 十分注重語法的可讀性,代碼審查不會成為問題,對 Kotlin 不熟悉的團(tuán)隊成員仍然能夠完成該工作。
Kotlin 基于 Java 6,所以假如你難以在項目中升級使用新版本的 JVM,你可以使用 Kotlin。
今年早些時候我向 Swiss Re 這家瑞士再保險公司的團(tuán)隊(他們使用 Java 和 .NET)展示了 Kotlin。首先我定義了一個簡單的 Java 類包含一些字段以及 toString、equals、hashCode 等方法,大概有 50 行代碼。然后我將它轉(zhuǎn)換成 Kotlin 代碼(大部分是自動完成的),結(jié)果僅剩 1 行代碼,接著我還演示了其它節(jié)省時間的特性。他們看過后對 Kotlin 充滿了熱情并且認(rèn)為 Kotlin 是它們項目中 C# 語言的一個潛在競爭對手。
我認(rèn)為 Kotlin 正中企業(yè) Java 開發(fā)者的紅心,所以盡管 Kotlin 是免費(fèi)的,JetBrains 還是能夠通過它增加商業(yè)版本 IDE 的銷售來賺大錢。這將激勵他們根據(jù)用戶的意愿持續(xù)改進(jìn)它。
與此相比,對于那些由不相關(guān)產(chǎn)品資助的語言開發(fā)者來說,當(dāng)用戶需求與之前的設(shè)計理念沖突時,他們很少會因此作出調(diào)整。
特性
Kotlin 作為一門新的編程語言能夠脫穎而出,是因為它關(guān)注生態(tài)系統(tǒng):JetBrains 懂得生產(chǎn)力的高低更多的取決于生態(tài)系統(tǒng)而不是便捷的語法。
盡快如此,Kotlin 還是有許多有用的特性能讓你編碼的過程變得愉快:
我們已經(jīng)提過 null 安全(可選),它能夠讓編譯器系統(tǒng)的標(biāo)記潛在的空指針引用。與一些語言不同的是它不涉及 option 類,因此是零開銷的,并且還有其它語言特性確保它不會造成不便。
精煉的語法:無處不在的類型推斷、簡單的函數(shù)只需要一行、簡單的結(jié)構(gòu)以及 JavaBeans 也只需要一行就能聲明、真正的屬性——可以在背后自動生成 getFoo/setFoo 方法用于與 Java 進(jìn)行交互、函數(shù)可以獨(dú)立存在于類之外。
異常均為非檢查型。(譯者注:感興趣的可以閱讀一下Java 理論與實踐: 關(guān)于異常的爭論)
使用 data class 關(guān)鍵字創(chuàng)建數(shù)據(jù)類會自動生成通用方法,例如 equals、hashCode、toString 以及 copy 和 componentN(同時聲明多個變量時會調(diào)用該方法)。這將幫助你在不使用構(gòu)建器的情況下便捷的獲得不變類(immutable classes)。
但如果你需要構(gòu)造復(fù)雜的結(jié)構(gòu)體,借助類型安全的構(gòu)建器這個特性可以簡潔的實現(xiàn)。如果你使用 Google Protocol Buffers 來存儲結(jié)構(gòu)化數(shù)據(jù), 通過 KBuilders 這個庫也能很輕易做到。
支持函數(shù)式編程以及零開銷的 lambda 表達(dá)式,能夠在 Java 的集合中做 Map、Filter、Folder 等處理。Kotlin 的類型系統(tǒng)能夠自動識別可變或者不可變的集合。
擴(kuò)展函數(shù)特性能夠讓你在不改動源碼的情況下為類添加方法。乍眼一看以為是為了避免寫出像 FooUtils 這種風(fēng)格工具類的語法糖,不過隨著使用的加深,你會認(rèn)識到它不僅能幫你更加容易的通過自動完成使用方法,還能協(xié)助你集成現(xiàn)有的 Java API 以及借助其它 Kotlin 特性構(gòu)建功能強(qiáng)大的擴(kuò)展。
支持運(yùn)算符重載,但是不會像 Scala 或者 Perl 那樣出現(xiàn)難以理解的代碼。運(yùn)算符被映射成相應(yīng)名字的方法,通過重寫這些方法改變運(yùn)算符的行為(包括函數(shù)調(diào)用),但是不能定義新的運(yùn)算符。這使得程序能夠兼顧功能與可讀性。
Kotlin 沒有宏或者其它的方式來重定義語言,但是通過這些精心設(shè)計的特性能夠使第三方庫自由的對它進(jìn)行擴(kuò)展,官方對集合類進(jìn)行的擴(kuò)展也只是小試牛刀而已,請看以下例子。
想使用 fibers、actors 和 Go 風(fēng)格的 channels?一個名為 Quasar 的庫已經(jīng)為你實現(xiàn)了。
使用 Markdown 替代 HTML 來編寫 API 文檔,這樣編寫 JavaDocs 可比以前舒適多了。(譯者注:JetBrains 提供了相應(yīng)的文檔生成器 Dokka)
更好用的泛型。如果你沒有完全掌握泛型參數(shù)中 super 以及 extends 的含義,別擔(dān)心,這不是你的錯。Java 的泛型的確令人費(fèi)解,Kotlin 解決了這個問題。
委托是一個大家都知道的設(shè)計模式,Kotlin 原生支持它。
== 運(yùn)算符的行為符合預(yù)期(譯者注:簡單來說 a == b 相當(dāng)于 a.equals(b);新增了 === 運(yùn)算符,用來判斷運(yùn)算符兩邊是否指向同一個對象)
想快速便捷的進(jìn)行異步編程嗎?當(dāng)然!
字符串插值“可以使用這樣的寫法在字符創(chuàng)中直接引用變量 {this.example}”
函數(shù)中的參數(shù)可以指定默認(rèn)值、使用可變長度以及通過參數(shù)名傳參。
還有許多的調(diào)整與優(yōu)化。假如 Java 中有某些讓你覺得困擾的問題,我相信 Kotlin 一定已經(jīng)把它處理好了。
現(xiàn)在就來試用一下!
跟很多現(xiàn)代編程語言一樣,Kotlin 可以通過網(wǎng)頁瀏覽器來進(jìn)行體驗。不過跟其他語言不一樣的是,Kotlin 的實驗網(wǎng)站提供了一個成熟的 IDE,包括響應(yīng)很快的自動完成,實時的后臺編譯,甚至還有在線的靜態(tài)分析!
在線試用一下吧
好了,讓我們繼續(xù)接下來的內(nèi)容
目前存在哪些問題?
生活中沒有什么是完美的,包括 Kotlin。以下是我嘗試這門語言時遇到的一些問題。
最大的問題是不夠成熟,因為 Kotlin 目前還處于 Beta 階段,這意味著:
每更新一個版本,語法、ABI 以及標(biāo)準(zhǔn)庫就變一次。好消息是這些變化通常比較微小,可以借助 IntelliJ IDE 來自動升級你的代碼,所以這個過程并不會太麻煩。
Java-to-Kotlin 的轉(zhuǎn)換工具(J2K)還沒有完成。它偶爾會大規(guī)模的破壞和默默地擦除 Java 8 中的 Lambdas(修改:2015 年 10 月:M13 版本的轉(zhuǎn)換工具已經(jīng)可以正確地處理 Java 8 的特性了)。由它轉(zhuǎn)換而成的代碼并不總是最好的寫法,但是 JetBrains 為這個工具付出了大量努力,它已經(jīng)是我用過的語言轉(zhuǎn)換工具中最好的了。所以我并不太擔(dān)心這個問題,這個轉(zhuǎn)換器正在迅速的改進(jìn)中,變得越來越成熟。
你會遇到編譯器錯誤。盡管我的程序并不大,但還是會發(fā)生無法編譯的情況,甚至錯誤的編譯結(jié)果。診斷這些問題并不難,但終歸還是影響了開發(fā)的體驗。
你會遇到 IDE 內(nèi)部錯誤。當(dāng)這個錯誤發(fā)生時,IntelliJ IDE 會彈出一個懸浮窗口,附帶向 JetBrains 報告的選項。大部分錯誤無需理會,不過依然會使人厭煩。
偶爾會出現(xiàn)無法加載提示文檔的錯誤(修改:M14 版本發(fā)布后,這個問題已被修復(fù))
目前 JetBrains 正致力于完善發(fā)布 1.0 版本而不是添加新的功能,期待這些問題能夠得到修復(fù)。
第二個我遇到的比較大的問題是,有時與 Java 的交互會受到局限。
一個典型的 Bug 是 Java 的類型系統(tǒng)無法防止你改變 Map 中 Key 的類型。按理來說,這樣操作應(yīng)該導(dǎo)致編譯器報錯,例如使用類型錯誤的 Key 刪除元素。有些 JDK 中的集合使用了泛型,它們某些重要方法的泛型參數(shù)是 Obejct,所以編譯器不會提示。當(dāng)在 IntelliJ IDE 中編寫 Java 代碼時會有靜態(tài)分析的警告,但是目前 Kotlin 環(huán)境還沒有這個功能。因為 Kotlin 使用的是 Java 的集合框架沒有自己實現(xiàn),所以這導(dǎo)致了一些類型安全方面的問題,我已經(jīng)遇到好幾次了。
(修改:1.0 Beta 版本中這個問題已經(jīng)解決了,Java 中集合框架的類型安全缺陷在 Kotlin 已經(jīng)不復(fù)存在。喲呵?。?/p>
另一個例子是,當(dāng)調(diào)用或使用 Java 代碼時 Kotlin 的 Null 安全特性無法發(fā)揮作用(可以借助注解彌補(bǔ))。作為 Kotlin 的初學(xué)者,剛開始你可能會寫許多調(diào)用 Java 庫的代碼,但是因為以上的問題它們并沒有你想象中那么好用。這種情況的改善只能等待 Kotlin 使用人數(shù)的增長。JetBrains 一直在嘗試使 Null 安全特性能體現(xiàn)在 Java 交互中,這種想法是好的,但有時考慮并太周全。(修改: 從 M13 版本開始,在 Java 代碼中將自動以 @NotNull @Nullable 等注解實現(xiàn) Kotlin 的 Null 安全特性)
雖然有以上的問題存在,但同時也使得我們能更流暢的使用 Java API,我覺得這種權(quán)衡是值得的,只是在開發(fā)中要注意。
其它需要考慮的問題:
Kotlin 的社區(qū)還比較小。雖然目前沒有多少 Kotlin 的庫可以使用,但是憑借優(yōu)秀的 Java 交互能力,Kotlin 可以使用現(xiàn)有成熟的 Java 庫。
如果你喜歡看書來學(xué)習(xí),那么你需要等到今年晚些時候才能看到 Kotlin 開發(fā)者寫的書(譯者注:Kotlin in Action)
純粹的函數(shù)編程風(fēng)格開發(fā)者可能會覺得類型系統(tǒng)中缺乏一些 Scala 或 Haskell 擁有的高級功能。如果你對類型系統(tǒng)一些功能比較看重,那么 Kotlin 可能不適合你。
Kotlin 還能編譯成 Javascript 代碼,但是比較少用,所以可能會遇到更多的問題,這是我從論壇中得到的印象。(修改: 目前 Kotlin 的開發(fā)重心在于完成 1.0 版本并使其穩(wěn)定運(yùn)行在 JVM 中,Javascript 方面的問題將會在 1.0 發(fā)布后著手解決)
沒有標(biāo)準(zhǔn)的編程風(fēng)格指南,目前 Kotlin 提供了多種語法可供選擇。不同人寫出來的 Kotlin 代碼很可能完全不一樣。這與 Go 嚴(yán)格的風(fēng)格形成了鮮明的對比。(修改: Kotlin 1.0 版本開始,一些靈活的語法已經(jīng)被移除了,例如現(xiàn)在重載運(yùn)算符以及定義中綴函數(shù)時必須分別使用 operator 和 infix 關(guān)鍵字進(jìn)行標(biāo)記)
Kotlin 的編譯速度稍稍慢于 Java,以及 IntelliJ IDE 的智能提示反應(yīng)有點(diǎn)緩慢,不算嚴(yán)重而且比 Scala 快多了。(修改:Kotlin 1.0 開始編譯速度有了明顯提升)
Kotlin 有一個 Eclipse 插件,但是很明顯沒有 IntelliJ 的好用。
Kotlin 在某些方面比 Java 要嚴(yán)格。它不會自動將 Int 轉(zhuǎn)換為 Long 類型,需要開發(fā)者顯示的轉(zhuǎn)換。這是因為 Kotlin 關(guān)注正確性和試圖解決《Java Puzzlers》一書中提出的問題。JetBrains 聲稱他們已經(jīng)搞定一半了。
Kotlin 基于 Java 6,因此會受到它的局限。Kotlin 與 C# 在很多領(lǐng)域都很相似甚至比 C# 做得更好,但是它缺少一些功能,例如 Java 平臺尚未支持的某些數(shù)據(jù)類型。
為什么應(yīng)該開始考慮使用 JVM
最近一段時間我遇到了很多使用動態(tài)腳本語言(JavaScript 或者 Go —— 譯者注:Go 應(yīng)該是靜態(tài)編譯型語言)的創(chuàng)業(yè)公司。
我在 Bitcoin Space 工作的時候,使用動態(tài)語言是非常痛苦的事情。在這些語言里沒有安全性的類型,這已經(jīng)導(dǎo)致了巨大的貨幣損失。Go 比較少出錯,但是在基礎(chǔ)層面上給人的體驗依然很差,比如說缺少好的調(diào)試工具,快速 GC 機(jī)制,穩(wěn)健的管理器以及可靠的分析工具。
過去 15 年或者更長時間里,Java 變得越來越健壯,越來越冗長,甚至有過度設(shè)計的跡象,這些變化很大程度上源于它的聲譽(yù)。企業(yè)級 Java 類的名字 PathVariableMapMethodArgumentResolver 就是例證。在很長一段時間里我沒有考慮 JVM,我確信這種環(huán)境并不適合我。
最終我因為 Android 被迫回到 Java,發(fā)現(xiàn) Java 的開發(fā)環(huán)境已經(jīng)改變了。雖然 XML 仍然不合時宜的頻繁出現(xiàn)在各種場合,但是一些基礎(chǔ)功能十分完善,令人印象深刻。 IntelliJ 是比 Eclipse 更快并且更智能的 IDE。Maven 一出現(xiàn)就得到了迅速的發(fā)展,擁有許多原本我想要其它構(gòu)建 / 依賴系統(tǒng)增加的功能。較新的 Web 框架像 Ninja 和 Play 從類似 Ruby on Rails 的框架中學(xué)到了輕量簡潔。有大量的庫可供使用。硬件性能變得更高以及 JVM 變得更有效率,等等轉(zhuǎn)變。
沒有真正改變的是語言本身,Java 代碼寫起來依然是令人不快的冗長。
現(xiàn)在有了 Kotlin,完全無需承受離開 Java 現(xiàn)有的生態(tài)系統(tǒng)的疼苦。你可以編寫更富有表現(xiàn)力的代碼,但是卻比腳本語言更簡潔,同時擁有更好的性能和更少的錯誤。
如果你喜歡 JavaScript,可以嘗試 Kotlin 的 JS 后端,或者在 Nashorn JS 引擎里運(yùn)行你現(xiàn)有的代碼。
最后,如果你喜歡 Go 語言是因為它可以編譯獨(dú)立運(yùn)行的程序,那么試試 javapackager 工具。Kotlin 在本地為每個平臺創(chuàng)建了捆綁包,這意味著在 linux 上不需要 JRE 的依賴就可以獨(dú)立自主的獲取 DEBs(linux 的安裝包)或者壓縮包。當(dāng)然,它拆包之后不是單個文件而是單個目錄,從部署的角度來看并不難操作。
簡而言之:如果你之前因為看 Java 不順眼而忽略了 JVM 的生態(tài)系統(tǒng),那么你應(yīng)該借著 Kotlin 這門新語言進(jìn)入這個世界瞧瞧。
當(dāng)前題目:kotlingo語言 kotlin語言中文
文章起源:http://chinadenli.net/article12/dodccdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、定制網(wǎng)站、網(wǎng)站制作、ChatGPT、、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)