欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

kotlingo語(yǔ)言 kotlin語(yǔ)言中文

近幾年有哪些編程語(yǔ)言?

目前,計(jì)算機(jī)語(yǔ)言的總數(shù)總計(jì)達(dá)9000種。但是,其中只有50種編程語(yǔ)言是較為流行的。今天,小編就給大家盤(pán)點(diǎn)一下2020年最受歡迎的編程語(yǔ)言。

10年積累的成都做網(wǎng)站、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有集安免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

1、Python

Python是目前開(kāi)發(fā)人員比較常用的編程語(yǔ)言之一。有很多大企業(yè)都選擇Python進(jìn)行產(chǎn)品開(kāi)發(fā),比如:NASA,Google,Instagram,Spotify,Uber,Netflix等,而且很奇妙的一點(diǎn)是,無(wú)論是初學(xué)者還是專(zhuān)業(yè)人員,都很喜歡Python,由此可見(jiàn)它的受歡迎程度。如果你是大數(shù)據(jù)職業(yè)的技術(shù)專(zhuān)業(yè)人員,那么Python可以說(shuō)是最合適的。

2、R

R是一種可以輕松連接到數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)的語(yǔ)言,但其實(shí)它本身不提供任何電子表格數(shù)據(jù)視圖。不過(guò),R語(yǔ)言最大的特點(diǎn)是為數(shù)據(jù)表示提供了多種圖形功能,例如條形圖,餅圖,時(shí)間序列,點(diǎn)圖,3D表面,圖像圖,地圖,散點(diǎn)圖等。R語(yǔ)言可以幫助用戶(hù)很容易地自定義圖形,并開(kāi)發(fā)有特點(diǎn)的新奇的圖形。

3、Java

Java出現(xiàn)之后,它就以其在數(shù)據(jù)科學(xué)技術(shù)中的多功能性而廣為人知。而且,用于處理和存儲(chǔ)大數(shù)據(jù)應(yīng)用程序的開(kāi)源框架Hadoop HDFS已完全用Java編寫(xiě)。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是一種開(kāi)源高級(jí)編程語(yǔ)言,目前主要是金融行業(yè)在著重使用。Scala的一個(gè)最大的特點(diǎn),是能夠保證其在大數(shù)據(jù)可用性方面的重要性。總之,Apache Spark是用于大數(shù)據(jù)應(yīng)用程序的集群計(jì)算框架,大數(shù)據(jù)從業(yè)者一般都需要具備Scala相關(guān)的豐富的知識(shí)和操作經(jīng)驗(yàn)。

5、Kotlin

Kotlin是一款很不錯(cuò)的的Android應(yīng)用開(kāi)發(fā)語(yǔ)言,可以在JVM上運(yùn)行,在一定程度上克服了Java的某些缺點(diǎn),提供許多現(xiàn)代功能。Kotlin的主要特點(diǎn)在于它的語(yǔ)言設(shè)計(jì),它提供了優(yōu)秀的指針、安全性、類(lèi)型推斷等功能。現(xiàn)有Java庫(kù)龐大的生態(tài)系統(tǒng)都可供Kotlin使用,因?yàn)镵otlin也運(yùn)行在JVM中。

如何評(píng)價(jià) Kotlin 語(yǔ)言?

kotlin是一門(mén)現(xiàn)代的編程語(yǔ)言呢,這門(mén)編程語(yǔ)言的設(shè)計(jì)符合很多現(xiàn)代編程語(yǔ)言的思維。簡(jiǎn)化編程語(yǔ)言,提升開(kāi)發(fā)效率,跨平臺(tái)開(kāi)發(fā),空安全,類(lèi)型轉(zhuǎn)換,協(xié)程,函數(shù)式編程,兼容龐大的資源庫(kù),工具友好等等。

這些特點(diǎn),是新一代的編程語(yǔ)言的追求的特色。比如說(shuō)Go,Swift等。kotlin是這一輪新的編程語(yǔ)言的大潮中,綜合實(shí)力非常突出的佼佼者。

可用于開(kāi)發(fā)跨平臺(tái)的應(yīng)用。kotlin是一門(mén)真正全棧式的編程語(yǔ)言,可以開(kāi)發(fā)web,Socket,安卓,js,NativeApp等。投資這門(mén)編程語(yǔ)言的收益率,太高了。

然后,它是一門(mén)靜態(tài)編譯型的編程語(yǔ)言。在很多專(zhuān)業(yè)的評(píng)測(cè)當(dāng)中,性能基本跟原生Java相當(dāng)。但是,某些項(xiàng)目會(huì)更省內(nèi)存。使用Kotlin開(kāi)發(fā)安卓,app的體積大約會(huì)增加1MB。

最后,與java和android 100%可互相操作。由于跟java一樣,基于JVM引擎生成字節(jié)碼,所以kotlin跟java和android,那是100%兼容的。說(shuō)白一點(diǎn),kotlin可以拿所有java的資源來(lái)用,干所有java能干的活,然后能比java干的更好。

每個(gè)開(kāi)發(fā)人員都應(yīng)該知道的16個(gè)頂級(jí)新計(jì)算機(jī)編程語(yǔ)言

函數(shù)式語(yǔ)言

Elixir

Elixir 比 Erlang 更容易編寫(xiě),具有 Haskell 等語(yǔ)言的函數(shù)式編程概念。Elixir是基于Erlang 虛擬機(jī)的,其廣為人知的特點(diǎn)是運(yùn)行低延時(shí)、分布式、可容錯(cuò)的系統(tǒng),并成功用于Web開(kāi)發(fā)與嵌入式軟件領(lǐng)域。

Elm

Elm是一種用于構(gòu)建 Web 應(yīng)用程序的函數(shù)式語(yǔ)言。業(yè)內(nèi)一般認(rèn)為,它適用于創(chuàng)建高可交互應(yīng)用,例如復(fù)雜的用戶(hù)界面,開(kāi)發(fā)人員可以通過(guò) Elm 快速編寫(xiě)富有表現(xiàn)力的系統(tǒng)。Elm 也以沒(méi)有運(yùn)行時(shí)異常而聞名。

PureScript

PureScript是一種可編譯為 JavaScript 的純函數(shù)式編程語(yǔ)言。與 Haskell 最相似的是,PureScript 最適合用于開(kāi)發(fā) Web 應(yīng)用程序和服務(wù)器端應(yīng)用程序。

PureScript 支持類(lèi)型推斷,與其他語(yǔ)言相比,需要明顯類(lèi)型注釋要少得多。

Swift

Swift是一種由蘋(píng)果公司開(kāi)發(fā)的通用編譯編程語(yǔ)言,最早的設(shè)想是替代上一代編程語(yǔ)言O(shè)bjective-C ,過(guò)程中結(jié)合了Objective-C、Rust、Ruby 和 Python等語(yǔ)言的編程思想。目前Swift用于開(kāi)發(fā)蘋(píng)果自己的手機(jī)、服務(wù)器、臺(tái)式機(jī)上的應(yīng)用軟件。

程序語(yǔ)言

Go

Go語(yǔ)言是由谷歌公司創(chuàng)造的類(lèi)似C風(fēng)格的語(yǔ)言。Go 比 C++ 或 Java 更簡(jiǎn)潔,比 Ruby 或 Python 更安全。

一些缺點(diǎn): 編碼要求嚴(yán)格。比如,不能混用符號(hào)和無(wú)符號(hào)整數(shù)。還有一個(gè)明顯的遺漏,Go語(yǔ)言沒(méi)有泛型和繼承。

但Go語(yǔ)言的優(yōu)勢(shì)同樣明顯,簡(jiǎn)單且易于使用。Go語(yǔ)言擅長(zhǎng)于網(wǎng)絡(luò)和多線程方面的編程。

面向?qū)ο笳Z(yǔ)言

DART

Dart同樣來(lái)自谷歌公司具有C語(yǔ)言風(fēng)格。Dart可以輕松編寫(xiě)JavaScript、Java for Android、本地機(jī)器代碼或獨(dú)立的 Dart 虛擬機(jī)。它還可以運(yùn)行后端代碼。

Dart 非常適合使用事件驅(qū)動(dòng)代碼構(gòu)建用戶(hù)界面。根據(jù)Dart 團(tuán)隊(duì)成員的說(shuō)法,Dart的優(yōu)勢(shì):可選的靜態(tài)類(lèi)型、最小的編譯時(shí)錯(cuò)誤和強(qiáng)大的內(nèi)置編輯器。

Pony

Pony是一種基于無(wú)數(shù)據(jù)競(jìng)爭(zhēng)類(lèi)型和垃圾收集的語(yǔ)言,并使用 actor 模型以及稱(chēng)為引用功能的東西。

你可以把 Pony 想象成某種“Rust 遇上 Erlang”的復(fù)合體,沒(méi)有鎖,高并發(fā)是其主要優(yōu)點(diǎn)。

Pony 的缺點(diǎn)是 API 穩(wěn)定性低、很少有高質(zhì)量的第三方庫(kù)和有限的本地工具。

TypeScript

TypeScript是一個(gè)基于 JavaScript 靜態(tài)類(lèi)型定義構(gòu)建,并由微軟維護(hù)且開(kāi)源編程語(yǔ)言。Visual Studio Code 或Visual Studio 是推薦的IDE編輯器,微軟大廠的用戶(hù)體驗(yàn)和錯(cuò)誤檢查也不用懷疑。

復(fù)合編程語(yǔ)言

Hack

Hack是一種作為 PHP 方言的 HipHop 虛擬機(jī)的編程語(yǔ)言。于 2014 年由Facebook創(chuàng)建,允許程序員同時(shí)使用靜態(tài)和動(dòng)態(tài)類(lèi)型(也稱(chēng)為漸進(jìn)類(lèi)型),這為編碼提供了靈活性。

Julia

Julia是一種高級(jí)通用編程語(yǔ)言,用于計(jì)算科學(xué)和數(shù)值分析。Julia 以動(dòng)態(tài)類(lèi)型和可重現(xiàn)的高性能特性而聞名。

Julia 在數(shù)據(jù)可視化和機(jī)器學(xué)習(xí)等方面都有大量用途。事實(shí)上,它被英國(guó)保險(xiǎn)公司 Aviva 用于風(fēng)險(xiǎn)計(jì)算,紐約聯(lián)邦儲(chǔ)備銀行用于金融建模,甚至氣候建模聯(lián)盟用于氣候變化建模。它擁有Fortran、C++、R、Java、C 、Python等的接口,這使其成為最受追捧的新語(yǔ)言之一。

Kotlin

Kotlin是運(yùn)行在 Java 虛擬機(jī)中的更快、更流暢的 Java 版本。它現(xiàn)在是Android 開(kāi)發(fā)的首選語(yǔ)言。根據(jù) Android 開(kāi)發(fā)者網(wǎng)站顯示,程序員正轉(zhuǎn)而采用 Kotlin,因?yàn)樵撜Z(yǔ)言的樣板代碼更少,空指針異常更少,并且與 Java 有互操作性。

Kotlin 可用于在 iOS 和 Android 上運(yùn)行的應(yīng)用程序、不使用額外運(yùn)行時(shí)或虛擬機(jī)。

Nim

Nim是一種優(yōu)先考慮可讀性的靜態(tài)類(lèi)型語(yǔ)言。通過(guò)結(jié)合多種語(yǔ)言的特性,Nim 為程序員提供了速度和易用性。

它帶有 JavaScript 后端、分散的包管理、自動(dòng)內(nèi)存管理、C 和 C++ 庫(kù)的綁定以及用于調(diào)試的回溯。作為一種語(yǔ)言,Nim 是有限的,但它包含一組元編程功能,如泛型、模板和宏,因此開(kāi)發(fā)人員可以在避免冗長(zhǎng)代碼的同時(shí)以不同的風(fēng)格工作。

OCaml作為此列表中較舊的語(yǔ)言,OCaml是一種多范式語(yǔ)言——既有函數(shù)式、命令式和類(lèi)型安全,也具有面向?qū)ο蠊δ堋?/p>

OCaml 的一些優(yōu)勢(shì):定義數(shù)據(jù)類(lèi)型很容易。默認(rèn)情況下,所有變量都是不可變的。API 穩(wěn)定,具有良好的庫(kù)向后兼容性。該語(yǔ)言還為獨(dú)立應(yīng)用程序提供自動(dòng)內(nèi)存管理和單獨(dú)編譯。

Reason

如果比JavaScript 更快、更簡(jiǎn)單且類(lèi)型安全會(huì)怎樣?

這就是創(chuàng)建Reason的 Facebook 開(kāi)發(fā)者想要回答的問(wèn)題。不過(guò),他并沒(méi)有從頭開(kāi)始構(gòu)建一種新語(yǔ)言,而是采用了 OCaml,并將其調(diào)整為類(lèi)似于 JavaScript。

Reason使用項(xiàng)目 BucketScript編譯為 JavaScript,并且可以訪問(wèn) 80% 的 JavaScript 工具和生態(tài)系統(tǒng)。它還可以編譯為準(zhǔn)系統(tǒng)、iOS、Android 和微控制器。

Red

Red是一種最初旨在克服 Rebol 語(yǔ)言限制的編程語(yǔ)言。Red 于 2011 年推出,受 Rebol、Lua 和 Scala 等語(yǔ)言的影響,對(duì)高級(jí)和低級(jí)編程都很有用。

該語(yǔ)言可用于開(kāi)發(fā)從高級(jí) GUI 到低級(jí)操作系統(tǒng)的所有方面。Red 擁有人性化的語(yǔ)法、低內(nèi)存占用和垃圾收集等優(yōu)點(diǎn)。

Rust

Rust解決了一些與 Go 相同的問(wèn)題,如系統(tǒng)級(jí)別的線程和進(jìn)程安全,,但Rust 更像 C 風(fēng)格的語(yǔ)法

但Rust語(yǔ)言的缺點(diǎn):靜態(tài)類(lèi)型和缺乏垃圾收集

Rust可直接訪問(wèn)內(nèi)存意味著程序員可以編寫(xiě)低級(jí)代碼,如操作系統(tǒng)內(nèi)核。Rust 也非常適合嵌入式設(shè)備、網(wǎng)絡(luò)服務(wù)和命令行編寫(xiě)。

如何評(píng)價(jià) Kotlin 語(yǔ)言

總體說(shuō), 對(duì)于大部分普通程序員, 可算比較完美了(綜合考量語(yǔ)言自身\平臺(tái)及庫(kù)\IDE等工具\(yùn)背后支持公司). 目前主要風(fēng)格還是偏OO, 如果可以再偏FP一點(diǎn)會(huì)更好. 像是一個(gè)Scala與C#的合體, 比Scala簡(jiǎn)單得多; 比C#更干凈, 因?yàn)闆](méi)有歷史包袱. 我多多少少寫(xiě)過(guò)代碼的語(yǔ)言超過(guò)10種, Kotlin與F#是感覺(jué)最舒適的, 另外Kotlin是少有的和Go/Python一樣寫(xiě)代碼時(shí)不需要程序員動(dòng)腦的語(yǔ)言, 很適合開(kāi)發(fā)普通項(xiàng)目.與Scala有根本設(shè)計(jì)思路上的不同, Scala是一切盡量自己來(lái), 實(shí)在不夠用了再用java的; Kotlin是盡量用Java的, 不夠用了再擴(kuò)展, 尤其體現(xiàn)在二者的容器庫(kù)上, 導(dǎo)致Kotlin的學(xué)習(xí)曲線極低, 這對(duì)于我這樣的普通碼農(nóng)是一大優(yōu)點(diǎn), 而高手們可能更看重Scala強(qiáng)大的容器庫(kù)和完備的FP功能, 所以個(gè)人估計(jì)它很難吸引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漂亮. 我個(gè)人非常喜歡使用衛(wèi)述句, 一直為不能在FP語(yǔ)言中用衛(wèi)述句而感到遺憾, Kotlin很好的解決了這個(gè)問(wèn)題.可以像F#/Go一樣直接在package內(nèi)寫(xiě)函數(shù), 不需要所有東西都放進(jìn)一個(gè)object/class之類(lèi)的, 代碼看著很舒服. 說(shuō)起來(lái), Kotlin的設(shè)計(jì)定位有點(diǎn)像jvm下的Go, 追求簡(jiǎn)潔實(shí)用, 但比Go好用(主要在泛型/FP兩方面). 目前雖然沒(méi)有自己的actor庫(kù), 但可以用akka, 這點(diǎn)就顯示出jvm的多語(yǔ)言群毆優(yōu)勢(shì)了.目前編譯器和插件還不如Scala的成熟, idea下曾碰到過(guò)IDE內(nèi)部錯(cuò)誤之類(lèi)的問(wèn)題, 自動(dòng)完成也經(jīng)常出問(wèn)題, 不過(guò)實(shí)際影響很小. 另外比較意外的是沒(méi)有union而一定要用data class或Pair/Triple, 也沒(méi)有type alias, 原來(lái)代碼里用的太多, 改起來(lái)有點(diǎn)煩, 但想一想Scala的編譯時(shí)間和類(lèi)型系統(tǒng), 忍了吧.估計(jì)會(huì)先在Android上開(kāi)始流行, 慢慢擴(kuò)展到server端. 但要達(dá)到Scala目前的流行程度, 短期內(nèi)是不可能了, 希望今年能出1.0.以后有新感想了再說(shuō)2015.06.01補(bǔ)充一段其設(shè)計(jì)者對(duì)于集合庫(kù)的說(shuō)明:“Scala 的經(jīng)驗(yàn)表明,有自己的集合庫(kù) — 總的來(lái)說(shuō)很不錯(cuò) — 可以帶來(lái)明顯優(yōu)勢(shì),但在需要與Java代碼互操作時(shí)也存在缺點(diǎn):所有數(shù)據(jù)都需要轉(zhuǎn)換/包裝,因此代碼有點(diǎn)難看,性能有時(shí)會(huì)大打折扣。鑒于此,Kotlin采用了另一種策略:我們使用簡(jiǎn)單的Java集合,但通過(guò)提取“虛擬”只讀接口并引入聲明位置變量使它們有不俗的表現(xiàn)。這樣,既可兼顧兼容性,又可得到一個(gè)好用的庫(kù)。Kotlin 依賴(lài)于Java庫(kù),但可以增強(qiáng)Java庫(kù)的功能,主要是通過(guò)擴(kuò)展,但有時(shí)使用編譯器支持的技術(shù)(集合/數(shù)組/基元),這在保證兼容性的同時(shí)保持了語(yǔ)言的純凈.” -- Andrey

對(duì)比Go 語(yǔ)言,Kotlin 有什么優(yōu)勢(shì)和劣勢(shì)

Kotlin的優(yōu)勢(shì)很明顯,因?yàn)镴VM是宇宙第一運(yùn)行時(shí)

Kotlin的劣勢(shì)也非常明顯,就是基于宇宙第一運(yùn)行時(shí)。JVM吃?xún)?nèi)存的問(wèn)題這輩子感覺(jué)是沒(méi)希望解決了

如何學(xué)習(xí)Kotlin編程語(yǔ)言

為什么說(shuō) Kotlin 是優(yōu)秀的

本文不會(huì)像一般介紹語(yǔ)言的文章那樣,一開(kāi)頭就羅列出語(yǔ)言那些酷炫的特性,我們稍后再來(lái)探討這些內(nèi)容。

首先我將介紹一些其它的信息,因?yàn)?013 年一項(xiàng)研究顯示,當(dāng)開(kāi)發(fā)者評(píng)估一種編程語(yǔ)言時(shí)生態(tài)系統(tǒng)要比語(yǔ)言特性更重要。這符合我個(gè)人的經(jīng)驗(yàn),下面就讓我開(kāi)始介紹吧:

Kotlin 被編譯成 JVM 字節(jié)碼或者 JavaScript 代碼。Java 開(kāi)發(fā)者將會(huì)是對(duì)它最感興趣的人,不過(guò)對(duì)于使用垃圾收集運(yùn)行時(shí)語(yǔ)言的開(kāi)發(fā)者而言它也具有一定的吸引力,比如 Scala、Go、Python、Ruby 和 JavaScript 等語(yǔ)言。

Kotlin 來(lái)自業(yè)界,而不是學(xué)術(shù)界。它解決了開(kāi)發(fā)者現(xiàn)今面臨的實(shí)際問(wèn)題。例如它的類(lèi)型系統(tǒng)可以幫助你避免空指針異常。

切換到 Kotlin 無(wú)需成本!它是開(kāi)源的但這不是重點(diǎn),重點(diǎn)是它提供了一個(gè)高質(zhì)量的一鍵從 Java 轉(zhuǎn)換到 Kotlin 的工具,并且十分關(guān)注 Java 二進(jìn)制文件的兼容性。你可以將現(xiàn)有 Java 項(xiàng)目的一次性轉(zhuǎn)換成 Kotlin 項(xiàng)目,而該項(xiàng)目仍將可以正常編譯,即使這是一個(gè)包含上百萬(wàn)行代碼的復(fù)雜程序。

顯然你可以從上文得知,Kotlin 程序能夠使用所有現(xiàn)存的 Java 框架和庫(kù),甚至那些依賴(lài)注解處理的高級(jí)框架。它們之間的交互是無(wú)縫的,不需要包裝或者適配層。Kotlin 可以整合 Maven,Gradle 以及其它構(gòu)建系統(tǒng)。

它十分平易近人,語(yǔ)法精煉直觀,僅僅是閱讀語(yǔ)言參考文檔幾個(gè)小時(shí)就能學(xué)會(huì)使用。Kotlin 看起來(lái)十分像 Scala 但是更加簡(jiǎn)潔并且兼顧了可讀性。

它不遵循特定的編程哲學(xué),例如極度的函數(shù)式編程或者面向?qū)ο缶幊田L(fēng)格。

它不會(huì)增加運(yùn)行時(shí)的開(kāi)銷(xiāo)。Kotlin 的標(biāo)準(zhǔn)庫(kù)十分小巧緊湊:專(zhuān)注于擴(kuò)展 Java 標(biāo)準(zhǔn)庫(kù),編譯階段的大量?jī)?nèi)聯(lián)操作意味像 map/filter/reduce 等管道結(jié)構(gòu)函數(shù)將被編譯成類(lèi)似于命令式語(yǔ)言的代碼。

Anko 與 Kovenant 等框架的出現(xiàn)意味著在 Android 開(kāi)發(fā)者中 Kotlin 開(kāi)始變得流行起來(lái)。如果你正在從事 Android 相關(guān)的工作,相信你很快就會(huì)獲得好的工作。你可以閱讀這份 Square 公司開(kāi)發(fā)者 JakeWharton 的報(bào)告,了解用 Kotlin 進(jìn)行 Android 開(kāi)發(fā)的體驗(yàn)。

Kotlin 允許你繼續(xù)使用你的工作效率提升工具。IntelliJ 的 IDE 對(duì) Kotlin 的支持十分完善:你可以對(duì)代碼進(jìn)行重構(gòu)、搜索、導(dǎo)航以及使用自動(dòng)完成,而且 IDE 充分支持調(diào)試、單元測(cè)試、性能分析等等功能。

除了 Android,我認(rèn)為 Kotlin 還非常適用于企業(yè)中 Java 的應(yīng)用場(chǎng)景。如果你的工作是整天埋頭于大公司的代碼庫(kù)中,那么當(dāng) Kotlin 1.0 版本正式發(fā)布時(shí)你應(yīng)該盡快去了解一下:

由知名公司為它提供強(qiáng)大的商業(yè)支持。 JetBrains 這家公司 有一個(gè)高度稱(chēng)職的大團(tuán)隊(duì)致力于該項(xiàng)目,有穩(wěn)定的商業(yè)模式甚至在自己的部分旗艦產(chǎn)品中使用 Kotlin,這表明短期內(nèi) Kotlin 不會(huì)被放棄。

使用 Kotlin 風(fēng)險(xiǎn)較低:可以由一兩個(gè)感興趣的團(tuán)隊(duì)成員在項(xiàng)目中小范圍的試驗(yàn) Kotlin,這并不會(huì)擾亂你的項(xiàng)目,因?yàn)?Kotlin 的類(lèi)對(duì)外提供的 Java API 看起來(lái)就與普通的 Java 代碼一樣。

因?yàn)?Kotlin 十分注重語(yǔ)法的可讀性,代碼審查不會(huì)成為問(wèn)題,對(duì) Kotlin 不熟悉的團(tuán)隊(duì)成員仍然能夠完成該工作。

Kotlin 基于 Java 6,所以假如你難以在項(xiàng)目中升級(jí)使用新版本的 JVM,你可以使用 Kotlin。

今年早些時(shí)候我向 Swiss Re 這家瑞士再保險(xiǎn)公司的團(tuán)隊(duì)(他們使用 Java 和 .NET)展示了 Kotlin。首先我定義了一個(gè)簡(jiǎn)單的 Java 類(lèi)包含一些字段以及 toString、equals、hashCode 等方法,大概有 50 行代碼。然后我將它轉(zhuǎn)換成 Kotlin 代碼(大部分是自動(dòng)完成的),結(jié)果僅剩 1 行代碼,接著我還演示了其它節(jié)省時(shí)間的特性。他們看過(guò)后對(duì) Kotlin 充滿(mǎn)了熱情并且認(rèn)為 Kotlin 是它們項(xiàng)目中 C# 語(yǔ)言的一個(gè)潛在競(jìng)爭(zhēng)對(duì)手。

我認(rèn)為 Kotlin 正中企業(yè) Java 開(kāi)發(fā)者的紅心,所以盡管 Kotlin 是免費(fèi)的,JetBrains 還是能夠通過(guò)它增加商業(yè)版本 IDE 的銷(xiāo)售來(lái)賺大錢(qián)。這將激勵(lì)他們根據(jù)用戶(hù)的意愿持續(xù)改進(jìn)它。

與此相比,對(duì)于那些由不相關(guān)產(chǎn)品資助的語(yǔ)言開(kāi)發(fā)者來(lái)說(shuō),當(dāng)用戶(hù)需求與之前的設(shè)計(jì)理念沖突時(shí),他們很少會(huì)因此作出調(diào)整。

特性

Kotlin 作為一門(mén)新的編程語(yǔ)言能夠脫穎而出,是因?yàn)樗P(guān)注生態(tài)系統(tǒng):JetBrains 懂得生產(chǎn)力的高低更多的取決于生態(tài)系統(tǒng)而不是便捷的語(yǔ)法。

盡快如此,Kotlin 還是有許多有用的特性能讓你編碼的過(guò)程變得愉快:

我們已經(jīng)提過(guò) null 安全(可選),它能夠讓編譯器系統(tǒng)的標(biāo)記潛在的空指針引用。與一些語(yǔ)言不同的是它不涉及 option 類(lèi),因此是零開(kāi)銷(xiāo)的,并且還有其它語(yǔ)言特性確保它不會(huì)造成不便。

精煉的語(yǔ)法:無(wú)處不在的類(lèi)型推斷、簡(jiǎn)單的函數(shù)只需要一行、簡(jiǎn)單的結(jié)構(gòu)以及 JavaBeans 也只需要一行就能聲明、真正的屬性——可以在背后自動(dòng)生成 getFoo/setFoo 方法用于與 Java 進(jìn)行交互、函數(shù)可以獨(dú)立存在于類(lèi)之外。

異常均為非檢查型。(譯者注:感興趣的可以閱讀一下Java 理論與實(shí)踐: 關(guān)于異常的爭(zhēng)論)

使用 data class 關(guān)鍵字創(chuàng)建數(shù)據(jù)類(lèi)會(huì)自動(dòng)生成通用方法,例如 equals、hashCode、toString 以及 copy 和 componentN(同時(shí)聲明多個(gè)變量時(shí)會(huì)調(diào)用該方法)。這將幫助你在不使用構(gòu)建器的情況下便捷的獲得不變類(lèi)(immutable classes)。

但如果你需要構(gòu)造復(fù)雜的結(jié)構(gòu)體,借助類(lèi)型安全的構(gòu)建器這個(gè)特性可以簡(jiǎn)潔的實(shí)現(xiàn)。如果你使用 Google Protocol Buffers 來(lái)存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù), 通過(guò) KBuilders 這個(gè)庫(kù)也能很輕易做到。

支持函數(shù)式編程以及零開(kāi)銷(xiāo)的 lambda 表達(dá)式,能夠在 Java 的集合中做 Map、Filter、Folder 等處理。Kotlin 的類(lèi)型系統(tǒng)能夠自動(dòng)識(shí)別可變或者不可變的集合。

擴(kuò)展函數(shù)特性能夠讓你在不改動(dòng)源碼的情況下為類(lèi)添加方法。乍眼一看以為是為了避免寫(xiě)出像 FooUtils 這種風(fēng)格工具類(lèi)的語(yǔ)法糖,不過(guò)隨著使用的加深,你會(huì)認(rèn)識(shí)到它不僅能幫你更加容易的通過(guò)自動(dòng)完成使用方法,還能協(xié)助你集成現(xiàn)有的 Java API 以及借助其它 Kotlin 特性構(gòu)建功能強(qiáng)大的擴(kuò)展。

支持運(yùn)算符重載,但是不會(huì)像 Scala 或者 Perl 那樣出現(xiàn)難以理解的代碼。運(yùn)算符被映射成相應(yīng)名字的方法,通過(guò)重寫(xiě)這些方法改變運(yùn)算符的行為(包括函數(shù)調(diào)用),但是不能定義新的運(yùn)算符。這使得程序能夠兼顧功能與可讀性。

Kotlin 沒(méi)有宏或者其它的方式來(lái)重定義語(yǔ)言,但是通過(guò)這些精心設(shè)計(jì)的特性能夠使第三方庫(kù)自由的對(duì)它進(jìn)行擴(kuò)展,官方對(duì)集合類(lèi)進(jìn)行的擴(kuò)展也只是小試牛刀而已,請(qǐng)看以下例子。

想使用 fibers、actors 和 Go 風(fēng)格的 channels?一個(gè)名為 Quasar 的庫(kù)已經(jīng)為你實(shí)現(xiàn)了。

使用 Markdown 替代 HTML 來(lái)編寫(xiě) API 文檔,這樣編寫(xiě) JavaDocs 可比以前舒適多了。(譯者注:JetBrains 提供了相應(yīng)的文檔生成器 Dokka)

更好用的泛型。如果你沒(méi)有完全掌握泛型參數(shù)中 super 以及 extends 的含義,別擔(dān)心,這不是你的錯(cuò)。Java 的泛型的確令人費(fèi)解,Kotlin 解決了這個(gè)問(wèn)題。

委托是一個(gè)大家都知道的設(shè)計(jì)模式,Kotlin 原生支持它。

== 運(yùn)算符的行為符合預(yù)期(譯者注:簡(jiǎn)單來(lái)說(shuō) a == b 相當(dāng)于 a.equals(b);新增了 === 運(yùn)算符,用來(lái)判斷運(yùn)算符兩邊是否指向同一個(gè)對(duì)象)

想快速便捷的進(jìn)行異步編程嗎?當(dāng)然!

字符串插值“可以使用這樣的寫(xiě)法在字符創(chuàng)中直接引用變量 {this.example}”

函數(shù)中的參數(shù)可以指定默認(rèn)值、使用可變長(zhǎng)度以及通過(guò)參數(shù)名傳參。

還有許多的調(diào)整與優(yōu)化。假如 Java 中有某些讓你覺(jué)得困擾的問(wèn)題,我相信 Kotlin 一定已經(jīng)把它處理好了。

現(xiàn)在就來(lái)試用一下!

跟很多現(xiàn)代編程語(yǔ)言一樣,Kotlin 可以通過(guò)網(wǎng)頁(yè)瀏覽器來(lái)進(jìn)行體驗(yàn)。不過(guò)跟其他語(yǔ)言不一樣的是,Kotlin 的實(shí)驗(yàn)網(wǎng)站提供了一個(gè)成熟的 IDE,包括響應(yīng)很快的自動(dòng)完成,實(shí)時(shí)的后臺(tái)編譯,甚至還有在線的靜態(tài)分析!

在線試用一下吧

好了,讓我們繼續(xù)接下來(lái)的內(nèi)容

目前存在哪些問(wèn)題?

生活中沒(méi)有什么是完美的,包括 Kotlin。以下是我嘗試這門(mén)語(yǔ)言時(shí)遇到的一些問(wèn)題。

最大的問(wèn)題是不夠成熟,因?yàn)?Kotlin 目前還處于 Beta 階段,這意味著:

每更新一個(gè)版本,語(yǔ)法、ABI 以及標(biāo)準(zhǔn)庫(kù)就變一次。好消息是這些變化通常比較微小,可以借助 IntelliJ IDE 來(lái)自動(dòng)升級(jí)你的代碼,所以這個(gè)過(guò)程并不會(huì)太麻煩。

Java-to-Kotlin 的轉(zhuǎn)換工具(J2K)還沒(méi)有完成。它偶爾會(huì)大規(guī)模的破壞和默默地擦除 Java 8 中的 Lambdas(修改:2015 年 10 月:M13 版本的轉(zhuǎn)換工具已經(jīng)可以正確地處理 Java 8 的特性了)。由它轉(zhuǎn)換而成的代碼并不總是最好的寫(xiě)法,但是 JetBrains 為這個(gè)工具付出了大量努力,它已經(jīng)是我用過(guò)的語(yǔ)言轉(zhuǎn)換工具中最好的了。所以我并不太擔(dān)心這個(gè)問(wèn)題,這個(gè)轉(zhuǎn)換器正在迅速的改進(jìn)中,變得越來(lái)越成熟。

你會(huì)遇到編譯器錯(cuò)誤。盡管我的程序并不大,但還是會(huì)發(fā)生無(wú)法編譯的情況,甚至錯(cuò)誤的編譯結(jié)果。診斷這些問(wèn)題并不難,但終歸還是影響了開(kāi)發(fā)的體驗(yàn)。

你會(huì)遇到 IDE 內(nèi)部錯(cuò)誤。當(dāng)這個(gè)錯(cuò)誤發(fā)生時(shí),IntelliJ IDE 會(huì)彈出一個(gè)懸浮窗口,附帶向 JetBrains 報(bào)告的選項(xiàng)。大部分錯(cuò)誤無(wú)需理會(huì),不過(guò)依然會(huì)使人厭煩。

偶爾會(huì)出現(xiàn)無(wú)法加載提示文檔的錯(cuò)誤(修改:M14 版本發(fā)布后,這個(gè)問(wèn)題已被修復(fù))

目前 JetBrains 正致力于完善發(fā)布 1.0 版本而不是添加新的功能,期待這些問(wèn)題能夠得到修復(fù)。

第二個(gè)我遇到的比較大的問(wèn)題是,有時(shí)與 Java 的交互會(huì)受到局限。

一個(gè)典型的 Bug 是 Java 的類(lèi)型系統(tǒng)無(wú)法防止你改變 Map 中 Key 的類(lèi)型。按理來(lái)說(shuō),這樣操作應(yīng)該導(dǎo)致編譯器報(bào)錯(cuò),例如使用類(lèi)型錯(cuò)誤的 Key 刪除元素。有些 JDK 中的集合使用了泛型,它們某些重要方法的泛型參數(shù)是 Obejct,所以編譯器不會(huì)提示。當(dāng)在 IntelliJ IDE 中編寫(xiě) Java 代碼時(shí)會(huì)有靜態(tài)分析的警告,但是目前 Kotlin 環(huán)境還沒(méi)有這個(gè)功能。因?yàn)?Kotlin 使用的是 Java 的集合框架沒(méi)有自己實(shí)現(xiàn),所以這導(dǎo)致了一些類(lèi)型安全方面的問(wèn)題,我已經(jīng)遇到好幾次了。

(修改:1.0 Beta 版本中這個(gè)問(wèn)題已經(jīng)解決了,Java 中集合框架的類(lèi)型安全缺陷在 Kotlin 已經(jīng)不復(fù)存在。喲呵!)

另一個(gè)例子是,當(dāng)調(diào)用或使用 Java 代碼時(shí) Kotlin 的 Null 安全特性無(wú)法發(fā)揮作用(可以借助注解彌補(bǔ))。作為 Kotlin 的初學(xué)者,剛開(kāi)始你可能會(huì)寫(xiě)許多調(diào)用 Java 庫(kù)的代碼,但是因?yàn)橐陨系膯?wèn)題它們并沒(méi)有你想象中那么好用。這種情況的改善只能等待 Kotlin 使用人數(shù)的增長(zhǎng)。JetBrains 一直在嘗試使 Null 安全特性能體現(xiàn)在 Java 交互中,這種想法是好的,但有時(shí)考慮并太周全。(修改: 從 M13 版本開(kāi)始,在 Java 代碼中將自動(dòng)以 @NotNull @Nullable 等注解實(shí)現(xiàn) Kotlin 的 Null 安全特性)

雖然有以上的問(wèn)題存在,但同時(shí)也使得我們能更流暢的使用 Java API,我覺(jué)得這種權(quán)衡是值得的,只是在開(kāi)發(fā)中要注意。

其它需要考慮的問(wèn)題:

Kotlin 的社區(qū)還比較小。雖然目前沒(méi)有多少 Kotlin 的庫(kù)可以使用,但是憑借優(yōu)秀的 Java 交互能力,Kotlin 可以使用現(xiàn)有成熟的 Java 庫(kù)。

如果你喜歡看書(shū)來(lái)學(xué)習(xí),那么你需要等到今年晚些時(shí)候才能看到 Kotlin 開(kāi)發(fā)者寫(xiě)的書(shū)(譯者注:Kotlin in Action)

純粹的函數(shù)編程風(fēng)格開(kāi)發(fā)者可能會(huì)覺(jué)得類(lèi)型系統(tǒng)中缺乏一些 Scala 或 Haskell 擁有的高級(jí)功能。如果你對(duì)類(lèi)型系統(tǒng)一些功能比較看重,那么 Kotlin 可能不適合你。

Kotlin 還能編譯成 Javascript 代碼,但是比較少用,所以可能會(huì)遇到更多的問(wèn)題,這是我從論壇中得到的印象。(修改: 目前 Kotlin 的開(kāi)發(fā)重心在于完成 1.0 版本并使其穩(wěn)定運(yùn)行在 JVM 中,Javascript 方面的問(wèn)題將會(huì)在 1.0 發(fā)布后著手解決)

沒(méi)有標(biāo)準(zhǔn)的編程風(fēng)格指南,目前 Kotlin 提供了多種語(yǔ)法可供選擇。不同人寫(xiě)出來(lái)的 Kotlin 代碼很可能完全不一樣。這與 Go 嚴(yán)格的風(fēng)格形成了鮮明的對(duì)比。(修改: Kotlin 1.0 版本開(kāi)始,一些靈活的語(yǔ)法已經(jīng)被移除了,例如現(xiàn)在重載運(yùn)算符以及定義中綴函數(shù)時(shí)必須分別使用 operator 和 infix 關(guān)鍵字進(jìn)行標(biāo)記)

Kotlin 的編譯速度稍稍慢于 Java,以及 IntelliJ IDE 的智能提示反應(yīng)有點(diǎn)緩慢,不算嚴(yán)重而且比 Scala 快多了。(修改:Kotlin 1.0 開(kāi)始編譯速度有了明顯提升)

Kotlin 有一個(gè) Eclipse 插件,但是很明顯沒(méi)有 IntelliJ 的好用。

Kotlin 在某些方面比 Java 要嚴(yán)格。它不會(huì)自動(dòng)將 Int 轉(zhuǎn)換為 Long 類(lèi)型,需要開(kāi)發(fā)者顯示的轉(zhuǎn)換。這是因?yàn)?Kotlin 關(guān)注正確性和試圖解決《Java Puzzlers》一書(shū)中提出的問(wèn)題。JetBrains 聲稱(chēng)他們已經(jīng)搞定一半了。

Kotlin 基于 Java 6,因此會(huì)受到它的局限。Kotlin 與 C# 在很多領(lǐng)域都很相似甚至比 C# 做得更好,但是它缺少一些功能,例如 Java 平臺(tái)尚未支持的某些數(shù)據(jù)類(lèi)型。

為什么應(yīng)該開(kāi)始考慮使用 JVM

最近一段時(shí)間我遇到了很多使用動(dòng)態(tài)腳本語(yǔ)言(JavaScript 或者 Go —— 譯者注:Go 應(yīng)該是靜態(tài)編譯型語(yǔ)言)的創(chuàng)業(yè)公司。

我在 Bitcoin Space 工作的時(shí)候,使用動(dòng)態(tài)語(yǔ)言是非常痛苦的事情。在這些語(yǔ)言里沒(méi)有安全性的類(lèi)型,這已經(jīng)導(dǎo)致了巨大的貨幣損失。Go 比較少出錯(cuò),但是在基礎(chǔ)層面上給人的體驗(yàn)依然很差,比如說(shuō)缺少好的調(diào)試工具,快速 GC 機(jī)制,穩(wěn)健的管理器以及可靠的分析工具。

過(guò)去 15 年或者更長(zhǎng)時(shí)間里,Java 變得越來(lái)越健壯,越來(lái)越冗長(zhǎng),甚至有過(guò)度設(shè)計(jì)的跡象,這些變化很大程度上源于它的聲譽(yù)。企業(yè)級(jí) Java 類(lèi)的名字 PathVariableMapMethodArgumentResolver 就是例證。在很長(zhǎng)一段時(shí)間里我沒(méi)有考慮 JVM,我確信這種環(huán)境并不適合我。

最終我因?yàn)?Android 被迫回到 Java,發(fā)現(xiàn) Java 的開(kāi)發(fā)環(huán)境已經(jīng)改變了。雖然 XML 仍然不合時(shí)宜的頻繁出現(xiàn)在各種場(chǎng)合,但是一些基礎(chǔ)功能十分完善,令人印象深刻。 IntelliJ 是比 Eclipse 更快并且更智能的 IDE。Maven 一出現(xiàn)就得到了迅速的發(fā)展,擁有許多原本我想要其它構(gòu)建 / 依賴(lài)系統(tǒng)增加的功能。較新的 Web 框架像 Ninja 和 Play 從類(lèi)似 Ruby on Rails 的框架中學(xué)到了輕量簡(jiǎn)潔。有大量的庫(kù)可供使用。硬件性能變得更高以及 JVM 變得更有效率,等等轉(zhuǎn)變。

沒(méi)有真正改變的是語(yǔ)言本身,Java 代碼寫(xiě)起來(lái)依然是令人不快的冗長(zhǎng)。

現(xiàn)在有了 Kotlin,完全無(wú)需承受離開(kāi) Java 現(xiàn)有的生態(tài)系統(tǒng)的疼苦。你可以編寫(xiě)更富有表現(xiàn)力的代碼,但是卻比腳本語(yǔ)言更簡(jiǎn)潔,同時(shí)擁有更好的性能和更少的錯(cuò)誤。

如果你喜歡 JavaScript,可以嘗試 Kotlin 的 JS 后端,或者在 Nashorn JS 引擎里運(yùn)行你現(xiàn)有的代碼。

最后,如果你喜歡 Go 語(yǔ)言是因?yàn)樗梢跃幾g獨(dú)立運(yùn)行的程序,那么試試 javapackager 工具。Kotlin 在本地為每個(gè)平臺(tái)創(chuàng)建了捆綁包,這意味著在 linux 上不需要 JRE 的依賴(lài)就可以獨(dú)立自主的獲取 DEBs(linux 的安裝包)或者壓縮包。當(dāng)然,它拆包之后不是單個(gè)文件而是單個(gè)目錄,從部署的角度來(lái)看并不難操作。

簡(jiǎn)而言之:如果你之前因?yàn)榭?Java 不順眼而忽略了 JVM 的生態(tài)系統(tǒng),那么你應(yīng)該借著 Kotlin 這門(mén)新語(yǔ)言進(jìn)入這個(gè)世界瞧瞧。

當(dāng)前題目:kotlingo語(yǔ)言 kotlin語(yǔ)言中文
文章起源:http://www.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)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)