《Kotlin極簡教程》第一章 Kotlin簡介

正式上架:《Kotlin極簡教程》Official on shelves: Kotlin Programming minimalist tutorial
京東JD:https://item.jd.com/12181725.html
天貓Tmall:https://detail.tmall.com/item.htm?id=558540170670

fun max(a: Int, b: Int): Int {
    return if (a > b) a else b
}

fun main(args: Array<String>) {
    println(max(1, 2))
}

“我真正關(guān)心的是Java虛擬機的概念些己,因為是它把所有的東西都聯(lián)系在了一起;是它造就了Java語言;是它使得事物能在所有的異構(gòu)平臺上得到運行荒澡;也還是它使得所有類型的語言能夠共存畜伐〗堪撸” ( James Gosling, Java之父 (2011, ServerSide))

JetBrains開源其Kotlin語言 基于JVM的新編程語言棋枕。
Kotlin敷鸦,類似 Xtend 一樣息楔,旨在提供一種更好的 Java 而非重建整個新平臺寝贡。這兩種語言都向下編譯為字節(jié)碼(雖然 Xtend 是首先轉(zhuǎn)換成相應(yīng)的 Java 代碼,再讓 Java 編譯器完成繁重的工作)值依,而且兩者都引入了函數(shù)和擴展函數(shù)(在某個有限范圍內(nèi)靜態(tài)地增加一個新方法到某個已有類型的能力)圃泡。Xtend 是基于 Eclipse 的,而 Kotlin 是基于 IntelliJ 的愿险,兩者都提供無界面構(gòu)建颇蜡。能夠首先演變到其他 IDE 的語言有可能成為最后的贏家。

Kotlin1.1發(fā)布日志(2017.3.1):

Our vision for Kotlin is to enable the use of a single expressive, performant, strongly typed language across all components of a modern application. Kotlin 1.1 makes two major steps towards this goal.

First, the JavaScript target is no longer experimental, and supports all Kotlin language features, a large part of the standard library, as well as JavaScript interoperability. This allows you to migrate the browser frontend of your applications to Kotlin, while continuing to use modern JavaScript development frameworks such as React.

Second, we’re introducing support for coroutines. As a lightweight alternative to threads, coroutines enable much more scalable application backends, supporting massive workloads on a single JVM instance. In addition to that, coroutines are a very expressive tool for implementing asynchronous behavior, which is important for building responsive user interfaces on all platforms.

Below we describe these two changes further. In other news: we’ve added type aliases, bound callable references, destructuring in lambdas and more. See the details in our What’s new page (check out the runnable examples!).

March 1, 2017
https://blog.jetbrains.com/kotlin/2017/03/kotlin-1-1/

Kotlin語言

Kotlin 是一個基于 JVM 的新的編程語言辆亏,由 JetBrains 開發(fā)风秤。

Github源碼:https://github.com/JetBrains/kotlin

其主要設(shè)計目標(biāo):

創(chuàng)建一種兼容 Java 的語言

讓它比 Java 更安全,能夠靜態(tài)檢測常見的陷阱扮叨。如:引用空指針

讓它比 Java 更簡潔缤弦,通過支持 variable type inference,higher-order functions (closures)彻磁,extension functions碍沐,mixins and first-class delegation 等實現(xiàn)。

讓它比最成熟的競爭對手 Scala語言更加簡單兵迅。

一個非常好的交互式Kotlin學(xué)習(xí)教程:
http://try.kotlinlang.org/

此開篇第一回也抢韭。

kotlin的定位非常有特點,它并不像是scala另起爐灶,將類庫,尤其是集合類都自己來了一遍.
kotlin是對現(xiàn)有java的增強,通過擴展方法給java提供了很多諸如fp之類的特性,但同時始終保持對java的兼容.
這是kotlin官網(wǎng)首頁重點強調(diào)的:

100% interoperable with Java?

這意味著什么呢?或者換個問法:我什么時候可以開始在我的項目中引入kotlin呢?
我的回答是:現(xiàn)在,立刻,馬上!

上個圖薪贫。

JVM語言家族

JVM語言家族

一個完整的語言有:

前端恍箭、優(yōu)化、后端瞧省、runtime扯夭、庫

JVM生態(tài)體系,把后面四個都給包辦了鞍匾。

jvm(Java虛擬機)交洗,是用C寫的,跟操作系統(tǒng)打交道C/C++目前看來橡淑,是好的選擇构拳。虛擬機就是java與操作系統(tǒng)的中間層。

庫/API就基本是java自身封裝實現(xiàn)梁棠。

從最初的Jython和JRuby置森,到Scala,Clojure都是在JVM上實現(xiàn)的語言符糊。為什么它們選擇JVM凫海?

跨平臺

你的語言編譯器后端只需要輸出 JVM 字節(jié)碼就可以∧新Γ跨平臺需要極大的工作量(這個輪子行贪,造起來有點耗時耗力)

JIT (Just-In-Time 即時編譯)性能

JIT 可以在運行中記錄程序運行的特征漾稀,并在其基礎(chǔ)上做大量的優(yōu)化(Java 企業(yè)級應(yīng)用的優(yōu)秀性能很大程度上是由此而來)。 JIT 自從 HotSpot JVM 隨 Java 1.2 發(fā)布以來建瘫,JVM JIT 的性能不斷提高崭捍,是無可爭議的成功產(chǎn)品。把 JVM 作為目標(biāo)平臺意味著大量的性能優(yōu)化工作可以「外包」給 JVM 來做啰脚,大大縮減了 Guest 語言的開發(fā)預(yù)算缕贡。

JVM 作為一個成熟的高層運行環(huán)境,為 Guest 語言提供了很多運行時所需要的服務(wù)拣播,比如內(nèi)存管理(有業(yè)界領(lǐng)先的垃圾回收等)晾咪,很大程度上避免了額外的獨立開發(fā)。

社區(qū)龐大且成熟

JVM 有多個獨立實現(xiàn)贮配,也有若干廠商會持續(xù)推進谍倦,資料完備,社區(qū)巨大泪勒。
Java 社區(qū)有大量成熟的庫昼蛀,一般來說,運行在 JVM 上的其它語言都會設(shè)計一個專用的「橋」來幫助直接使用 Java 的庫圆存。
Java 有成熟的開發(fā)工具和環(huán)境叼旋。

題外話

另外一個趨勢是把 Javascript 成為新的目標(biāo)平臺。很多主流語言都已經(jīng)出現(xiàn)了編譯器可以翻譯成 Javascript沦辙,這也是得益于近年來 Javascript 虛擬機性能的顯著提升夫植。

List-of-languages-that-compile-to-JS:
https://github.com/jashkenas/coffeescript/wiki/List-of-languages-that-compile-to-JS

下一代普遍可接受語言(next mass-appeal language)

下一代普遍可接受語言(next mass-appeal language)中,人的因素應(yīng)該起到重要作用油讯。

  1. 新的程序設(shè)計語言中的代碼片段應(yīng)該具備一個典型程序員所希望的適度復(fù)雜性详民。程序員會去期望在每天的工作中使用的語言。
  2. 中級程序員認(rèn)可陌兑。所謂中級程序員是指那些普遍對博客沈跨、微博或者新語言不感興趣的人。
  3. 程序員可以不用別人的幫助或者接受培訓(xùn)兔综,就能對新的程序設(shè)計語言中的代碼片段的功能進行合理的準(zhǔn)確的推測饿凛。

NBJL可以走多遠就目前來看是難以下定論的,但是我相信這是一個比較實際的問題软驰。我們所需要的新的程序設(shè)計語言能夠不需要大規(guī)模的培訓(xùn)涧窒,程序員們可以快速上手。

在其功能方面碌宴,注諸如如下條目:

  • 類C的語法(很好用也很熟悉)
  • 靜態(tài)類型(動態(tài)類型過于松散并且性能有限)
  • 遵循面向?qū)ο蟪绦蛟O(shè)計(Object Oriented Programming杀狡,OOP)思想,并且包括函數(shù)式語言的元素(純函數(shù)式言非主流編程語言)
  • 易于反射獲得(從而避免靜態(tài)類型限制)
  • 屬性(getter和setter實在是太讓人討厭了)
  • 閉包
  • Null判斷(提供一個判斷變量能否為null的方式)
  • 并發(fā)(好過原始線程和共享可變狀態(tài)(shared mutable state))
  • 模塊化(需要考慮更大的單元)
  • 工具(希望新語言能夠?qū)τ诠ぞ唛_發(fā)有所幫助)
  • 可擴展性(語言的設(shè)計具備很好的可擴展性贰镣,以支持其上的二次開發(fā)呜象,而不需要去修改語言本身的設(shè)計)
    ...

當(dāng)然還有其他一些可以討論的主題-語言設(shè)計其實堪比藝術(shù)品設(shè)計膳凝,有太多角度可以觀察了。

9個殺手級 JVM 編程語言

Java虛擬機已經(jīng)不再是僅僅局限在 Java 了恭陡,很多語言提供了腳本轉(zhuǎn)換蹬音,可以讓其他的程序在java虛擬機上運行,這樣能夠讓更多的開發(fā)者能夠依靠JVM在Java平臺上大有作為休玩。而且虛擬機以及 對應(yīng)的字節(jié)碼都是開源的著淆,所以你也能很容易地生成對應(yīng)字節(jié)碼來做一款屬于你自己的編程語言。我們今天來看看以下9種新的編程語言拴疤。

Groovy
Groovy是一個被編譯成字節(jié)碼的面向?qū)ο蟮恼Z言永部。它的語法風(fēng)格與java很像,但是又沒java那么混亂呐矾。Java程序員能夠很快的熟練使用 Groovy苔埋;實際上,Groovy編譯器是可以接受完全純粹的Java語法格式的蜒犯,這樣能夠讓程序員在學(xué)習(xí)Groovy時不需要學(xué)習(xí)任何新語法组橄。需要注 意使用Groovy的一個重要特點就是使用類型推斷,即能夠讓編譯器能夠在程序員沒有明確說明的時候推斷出變量的類型罚随。同時Groovy也提供了一個高級 架構(gòu)來解決字符串處理玉工,xml的序列化與反序列化以及單元測試等等 -- 所有的這一切好處都能為程序員節(jié)約不少時間。

JRuby
JRuby是用來橋接Java與Ruby的淘菩,它是使用比Groovy更加簡短的語法來編寫代碼遵班,能夠讓每行代碼執(zhí)行更多的任務(wù)。就和Ruby一 樣瞄勾,JRuby不僅僅只提供了高級的語法格式费奸。它同樣提供了純粹的面向?qū)ο蟮膶崿F(xiàn),閉包等等进陡,而且JRuby跟Ruby自身相比多了很多基于Java類庫 可以調(diào)用,雖然Ruby也有很多類庫微服,但是在數(shù)量以及廣泛性上是無法跟Java標(biāo)準(zhǔn)類庫相比的趾疚。

Jython
Jython,aka JPython以蕴,屬于第一種專門為JVM專用的腳本語言糙麦。它能夠用Python語言來高效生成動態(tài)編譯的Java字節(jié)碼。一些可選的靜態(tài)編譯方式能夠被用 來開發(fā)applets丛肮,servlets赡磅,以及beans。作為Jython的首席程序員宝与,Jim Hugunin焚廊,現(xiàn)在已經(jīng)停止了Jython的相關(guān)工作而去微軟干活冶匹。所以這門語言的發(fā)展僅僅也就從2005-2008年,所以就現(xiàn)在看來Jython已 經(jīng)無法與Groovy以及JRuby作為對手了∨匚粒現(xiàn)在Jython可以在一些商業(yè)應(yīng)用中找到嚼隘,也已經(jīng)得到了WebSphere Application Server以及IMB的商業(yè)Java EE產(chǎn)品部門的官方支持。

Clojure
Clojure是純粹的函數(shù)式編程語言袒餐。與Scala類似飞蛹,Clojure已經(jīng)有很多內(nèi)置的并行運行基礎(chǔ)建設(shè)能夠讓很多方法同時執(zhí)行。Clojure也是 被設(shè)計為生成通用語言灸眼,能夠生成.NET以及JavaScript卧檐。雖然Clojure也能被直接編譯成Java字節(jié)碼,但是無法使用動態(tài)語言特性以及直 接調(diào)用Java類庫焰宣。與其他的JVM腳本語言不一樣泄隔,Clojure并不算是面向?qū)ο蟮摹?/p>

Scala
Scala經(jīng)常被我們描述為多模式的編程語言,因為它混合了來自很多編程語言的元素的特征宛徊。但無論如何它本質(zhì)上還是一個純粹的面向?qū)ο笳Z言佛嬉。它相比傳統(tǒng)編 程語言最大的優(yōu)勢就是提供了很好并行編程基礎(chǔ)框架措施了。這是唯一一個在JVM中擁有actors -- 另一種并行編程代碼生成器闸天。Scala代碼能很好的被優(yōu)化成字節(jié)碼暖呕,運行起來和原生Java一樣快。

Kotlin
Kotlin是靜態(tài)類型的語言苞氮,也可以編程成Java字節(jié)碼以及JavaScript湾揽,作為一個時髦又表現(xiàn)豐富的編程語言,Kotlin就是被設(shè)計用來生 產(chǎn)高性能要求的程序的笼吟,所以運行起來和Java也是不相上下库物。Kotlin可以從 JetBrains InteilliJ Idea IDE這個開發(fā)工具以插件形式使用。

Rhino
Rhino是使用Java編寫的開源的JavaScript引擎贷帮。當(dāng)前是Mozilla公司在主導(dǎo)它的發(fā)展戚揭,Rhino的特點是為JavaScript加 了個殼,然后嵌入到Java中撵枢,這樣能夠讓Java程序員直接使用民晒。其中Rhino的JavaAdapters能夠讓JavaScript通過調(diào)用 Java的類來實現(xiàn)特定的功能。

Ceylon
Ceylon是一個通用的锄禽,靜態(tài)類型編程語言潜必,也是基于阻塞以及面向?qū)ο蟮摹?jù)說這個語言深受Java的影響沃但,而且它一開始就是被Red Hat公司設(shè)計為給大型團隊合作完成大型項目來的磁滚。Ceylon的主要努力方向是將語言變得更加可讀,更加可預(yù)期宵晚,更加工具化以及更加模塊化垂攘。據(jù) Gavin King所說维雇,Ceylon將不僅僅只是個編譯器,而將是一個可以取代Java SDK的新Ceylon SDK搜贤。

Fantom
Fantom能夠在運行時為JVM以及.NET或者JavaScript平臺生成字節(jié)碼谆沃,F(xiàn)antom是與Groovy以及JRuby差不多的一樣面向?qū)?象的編程語言,但是悲劇的是Fantom無法使用Java類庫仪芒,而是使用它自己擴展的類庫唁影。忘了說Fantom也包括actors,而且它最大的優(yōu)勢就是 在網(wǎng)站上有一個非常完備卓越的API文檔系統(tǒng)掂名。

中文參考文檔:

https://github.com/MiniSpringBootTutorial/KotlinDoc-cn


Kotlin 開發(fā)者社區(qū)

國內(nèi)第一Kotlin 開發(fā)者社區(qū)公眾號据沈,主要分享、交流 Kotlin 編程語言饺蔑、Spring Boot锌介、Android、React.js/Node.js猾警、函數(shù)式編程孔祸、編程思想等相關(guān)主題。

開發(fā)者社區(qū) QRCode.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末发皿,一起剝皮案震驚了整個濱河市崔慧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌穴墅,老刑警劉巖惶室,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玄货,居然都是意外死亡皇钞,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門松捉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來夹界,“玉大人,你說我怎么就攤上這事惩坑〉糁眩” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵以舒,是天一觀的道長。 經(jīng)常有香客問我慢哈,道長蔓钟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任卵贱,我火速辦了婚禮滥沫,結(jié)果婚禮上侣集,老公的妹妹穿的比我還像新娘。我一直安慰自己兰绣,他們只是感情好世分,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缀辩,像睡著了一般臭埋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上臀玄,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天瓢阴,我揣著相機與錄音,去河邊找鬼健无。 笑死荣恐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的累贤。 我是一名探鬼主播叠穆,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼臼膏!你這毒婦竟也來了硼被?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤讶请,失蹤者是張志新(化名)和其女友劉穎祷嘶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夺溢,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡论巍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了风响。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘉汰。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖状勤,靈堂內(nèi)的尸體忽然破棺而出鞋怀,到底是詐尸還是另有隱情,我是刑警寧澤持搜,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布密似,位于F島的核電站,受9級特大地震影響葫盼,放射性物質(zhì)發(fā)生泄漏残腌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抛猫。 院中可真熱鬧蟆盹,春花似錦、人聲如沸闺金。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽败匹。三九已至寨昙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哎壳,已是汗流浹背毅待。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留归榕,地道東北人尸红。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像刹泄,于是被迫代替她去往敵國和親外里。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容