Kotlin語言系統化學習K01-kotlin簡介

Kotlin系統化學習-20170822
文章中有些內容是借鑒《Kotlin實戰》中文版,特此注明一下。

一起從零學Kotlin-20170728:
http://blog.csdn.net/clandellen/article/details/76283527

一起從零學Kotlin-20170730:
http://blog.csdn.net/clandellen/article/details/76369434

一起從零學Kotlin-20170801:
http://blog.csdn.net/clandellen/article/details/76519661

一起從零學Kotlin-20170803:
http://blog.csdn.net/clandellen/article/details/76602453

一起從零學Kotlin-20170805:
http://blog.csdn.net/clandellen/article/details/76698177

Kotlin系統化學習系列文章(所有文章的鏈接)
http://blog.csdn.net/ClAndEllen/article/details/77466628

K01-Kotlin簡介

1.在學習之前,你應該先遠遠觀望一下Kotlin語言

1.1 Kotlin與Java的一些關系和一些區別

首先Kotlin是針對Java平臺的一門新式編程語言,也是Android現在官方開發語言,Kotlin簡潔,安全,可靠,最主要的是支持與Java的互操作。而Java不得不說很強大,相信學習筆者這篇文章的同學,Java能力自然不會差。Kotlin能夠完美的使用Java當中的各種框架,所以Kotlin的性能自然也不會差的,反而某些方面做到很優秀。每學習一個新的語言,那么第一個例子那絕對是"HelloWorld!",一下就是Kotlin語言"你好世界"的例子。

fun main(args: Array<String>) {

   println("HelloWorld!--> 你好世界!")

}

1.2 Kotlin的特性(此處全部借鑒《Kotlin實戰》中文版)

1.2.1 目標平臺:服務器端,Android以及任何Java運行的地方

??Kotlin的首要目標是提供一種更簡潔,更高效,更安全的替代Java的語言,并且適用于現在所有的Java環境。Java是一門非常受歡迎的語言,它廣泛的應用于不同的環境中:小到智能卡(JavaCard技術),大到Google,Twitter,LinkedIn和其他這種規模的互聯網公司運行的最大的數據中心。在這些地方,使用Kotlin可以幫助開發者在實現目標的同時減少代碼并避免麻煩。
??Kotlin最長見的應用場景有:
??(1).編寫服務器端代碼(典型的 代表是Web應用后端)
??(2).創建Android設備上運行的移動應用
??但Kotlin還有其他的用武之地。例如,可以使用Intel Multi-OS Engine讓Kotlin代碼運行在IOS設備上。還可以使用Kotlin和TornadoFX以及JavaFX(Getting Started with JavaFX,Oracle,http://mng.bz/500y)一起來構建桌面應用程序。
??除了Java之外,Kotlin還可以編譯成JavaScript,允許你在瀏覽器中運行Kotlin代碼。Kotlin的目標平臺是相當廣泛的。Kotlin并沒有被限制在單一的問題領,也沒有被限制在解決軟件開發者面臨的某一類型的挑戰。相反,對所有開發過程中涌現的任務,Kotlin都提供了全面的生產力提升。它借助支持特定領域或編程范式的庫,提供了卓越的集成水準。

1.2.2 靜態類型

??Kotlin和Java一樣是一種靜態類型的編程語言。這意味著所有表達式的類型在編譯期已經確定了,而編譯器就能驗證對象是否包含了你想訪問的方法或者字段。
??這與動態類型的編程語言形成了鮮明的對比,后者在JVM上的代表包括Groovy和JRuby。這些語言允許你定義可以存儲任何數據類型和變量,或者返回任何數據類型的函數,并在運行期時才解析方法和字段引用。這會減少代碼質量并增加創建數據結構的靈活性。但它的特點是,在編譯期間不能發現像名字拼寫錯誤這樣的問題,繼而導致運行時的錯誤。
??另一方面,與Java不同的是,Kotlin不需要你在源代碼中顯式地聲明每個變量的類型。很多情況下,變量類型可以根據上下文來自動判斷,這樣就可以省去類型的聲明。這里有一個可能最簡單的例子:

val x = 1

在聲明這個變量時,由于變量初始化為整數值,Kotlin自動判斷它的類型是Int,編譯器這種從上下文推斷類型變量的能力被稱作類型推導。
??下面羅列了一些靜態類型帶來的好處:
??性能---方法調用速度更快,因為不需要在運行時來判斷調用的是哪個方法。
??可靠性---編譯器驗證了程序的正確性,因而運行時崩潰的概率更低。
??可維護性---陌生代碼更容易維護,因為你可以看到代碼中用到的對象的類 型。
??工具支持---靜態類型使IDE能提供可靠的重構,精確的代碼補全以及其他特性。

??得益于Kotlin對類型推導的支持,你不再需要顯式的聲明類型,因此大部分關于靜態類型的額外冗長代碼也就不復存在了。
??當你檢視Kotlin類型系統的細節時,你會發現許多熟悉的概念。類,接口以及泛型和Java非常接近,所以大部分的Java知識可以很容易地轉移到Kotlin。然而,也會有一些新概念出現。
??其中最重要的是Kotlin對可空類型的支持,通過在編譯期間檢測可能存在的空指針異常,它讓你可以寫出更可靠的程序。本章最后面我們將回顧可空類型,并在之后的文章中進行詳細討論。
??另外一個Kotlin類型系統的新概念是對函數類型的支持。要搞清這一點,我們先要了解函數式編程的主要思想,以及Kotlin是如何支持這種編程風格的。

1.2.3 函數式與面向對象

作為一個Java開發者,你一定對面向對象編程的核心概念爛熟于胸,但函數式編程對你來說卻可能很新鮮。函數式編程的核心概念如下:

??頭等函數---把函數(一小段行為)當作值使用,可以用變量保存它,把它當參數傳遞,或者當作其他函數的返回值。
??不可變性---使用不可變對象,這保證了它們的狀態在其創建之后不再變化。
??無副作用---使用的是純函數。此函數在輸入相同時會產生同樣的結果,并且不會修改其他對象的狀態,也不會和外面的世界交互。

函數式編程風格的代碼能給你帶來什么好處?首先,簡潔。函數式風格的代碼比相應的命令式風格的代碼更優雅,更簡練。因為把函數當作值可以讓你獲得更強大的抽線的能力,從而避免重復代碼。
??假設你有兩段類似的代碼,實現相似的任務(例如:在集合中尋找一個匹配的元素)但具體細節略有不同(如何判斷元素是匹配的)。可以輕易地將邏輯中公共的部分提取到一個函數中,并將其他不同的部分作為參數傳遞給它。這些參數本身也是函數,但你可以使用一種簡潔的語法來表示這些匿名的函數,它被稱作為Lambda表達式:

??函數式編程風格的代碼帶來的第二個好處就是多線程安全。多線程程序中最大的錯誤來源之一就是,在沒有采用適當同步機制的情況下,在不同的線程上修改同一份數據。如果你使用的不是不可變數據結構和純函數,就能保證這樣不安全的修改根本不會發生,也就不需要考慮為其設計復雜的同步方案。
??最后,函數式編程風格可以在任何編程語言中使用(包括Java),它的很多主張都被認為是良好的編程風格。然而并不是所有的語言都提供了語法和庫支持,讓我們可以不費力地使用這種風格。例如:Java8之前的Java版本都缺少了這種支持。Kotlin擁有豐富的特性集從一開始就支持函數式編程風格,包括:
??(1)函數類型,允許函數接受其他函數作為參數,或者返回其他函數。
??(2)Lambda表達式,讓你用最少的樣板代碼方便地傳遞代碼塊。
??(3)數據類,提供了創建不可變值對象的簡明語法。
??(4)標準庫中包括了豐富的API集合,讓你用函數式編程風格操作對象和集合。
??Kotlin允許你使用函數式編程風格但并沒有強制你使用它。當你需要的時候,可以使用可變數據,也可以編寫帶副作用的函數,而且不需要跳過任何多余的步驟。然而,毫無疑問的是,在Kotlin中使用基于接口和類層次結構的庫就像Java一樣簡單。當編寫Kotlin代碼的時候,可以結合使用面向對象編程和函數式編程風格,并使用最合適的工具來對付亟(ji,念第2聲)待解決的問題。

1.2.4 免費并開源

??Kotlin語言(包括編譯器,庫和所有相關工具)是完全開源的,并且可以自由使用。它采用Apache2許可證;其開發過程完全公開在GitHub上,并且歡迎來自社區的貢獻。如果你要開發Kotlin應用程序,有三種開源供你選擇:IntelliJ IDEA Community2版,Android Studio以及Eclipse,它們都完全支持Kotlin(當然,IntelliJ IDEA Ultimate 也支持Kotlin)。
??現在你明白了Kotlin是什么語言,讓我們看看Kotlin在具體的實際應用中會給你帶來哪些好處。

1.3 Kotlin應用(此處全部借鑒《Kotlin實戰》中文版)

??如前所述,Kotlin使用的兩個主要的領域是服務器端和Android開發。接下來我們分別看看這兩個領域,以及為什么Kotlin非常適合它們。

1.3.1 服務器端的Kotlin

??服務器端編程是一個非常大的概念,它包含了所有下列的應用程序類型甚至更多:
??(1)返回HTML頁面給瀏覽器的Web應用程序。
??(2)通過HTTP暴露JSON API的移動應用后端服務。
??(3)通過RPC協議互相通信的微服務。

??多年以來,開發者一直在構建這些類型的應用,并且積累了大量的框架和技術來幫助他們構建這些應用。這些應用并不是孤立地開發或者從零開始的,它們幾乎總是對現有的系統進行擴展,改進或者替換,新的代碼必須和系統中現有部分進行集成,而這些部分可能很多年之前就寫成了。
??這種環境下Kotlin的一大優勢就是它們與現有的Java代碼的無縫的互操作性。無論是要編寫一個全新的控件還是移植一個現有服務的代碼,Kotlin都毫無壓力。不管你需要在Kotlin中繼承Java類,還是1以某種方式注解一個類的方法和字段,都不會遇到任何問題。它帶來的優點是系統的代碼更加緊湊,更可靠,更易于維護。
??與此同時,Kotlin還引入許多用于開發這類系統的新技術。例如,對構建器模式的支持讓你可以使用更簡潔的語法來創建任何對象圖,同時保留了語言中全套的抽象機制和代碼重用工具。
??這個特性的一個最簡單的用例就是HTML生成庫,它可以把一個外部模版語言替換成簡潔且完全類型安全的解決方案。這里有一個例子:

??可以輕松地把映射到HTML標簽的函數和常規的Kotlin語言結構組合起來。你不再需要使用一門獨立的模版語言,也不需要學習新的語法,僅僅使用循環就可以生成HTML頁面。
??另外一個能用上Kotlin干凈和簡潔的DSL的用例是持久化框架。例如,Exposed框架(https://github.com/jetbrains/exposed)就提供了易讀的DSL,可以完全使用Kotlin代碼來描述SQL數據庫的結構并執行查詢操作,并且有全面的類型檢查。下面這個小例子展示了可行的做法:

1.3.2 Android上的Kotlin

??一個典型的移動應用和一個典型的企業應用完全不同。它更小,更少地依賴與現有的代碼集成,通常需要快速交付,同時需要保證在大量的設備上能夠可靠地運行。這類項目Kotlin也能勝任。
??Kotlin的語言特征,加上支持Android框架的特殊編譯器插件,讓Android的開發體驗變得高效和愉悅,常見的開發任務,比如給控件添加監控器或者把布局元素綁定到字段,可以用更少的代碼完成,有時甚至根本不用寫任何代碼(編譯器會幫你生成)。同樣由Kotlin團隊打造的庫Anko(https://github.com/Kotlin/anko)給許多標準Android API添加了Kotlin友好的適配器,進一步提升了Android的開發體驗。
??下面是Anko的一個簡單例子,可以品嘗到使用Kotlin進行Android開發的滋味。只要把這段代碼放在一個Activity中,一個簡單的Android應用就做好了!


??使用Kotlin帶來的另一優勢就是更好的應用可靠性。如果你有開發Android應用的經驗,你一定對"Unfortunately,Process Has Stopped"對話框深惡痛絕。如果你的應用有未處理的異常,這個對話框就會出現,而這種異常一般是NullPointException(空指針異常)。Kotlin的類型系統通過精確地跟蹤null值,大大減輕了空指針異常問題帶來的壓力。大部分Java中會導致NullPointException的代碼在Kotlin中無法編譯成功,以確保這些錯誤在應用到達用戶手中之前得到修正。
??同時,由于Kotlin完全兼容Java6,使用它并不會帶來任何新的編譯問題。你可以享受所有的Kotlin的炫酷新特性,而你的用戶仍然可以在它們的設備上使用你的應用,即使他們的設備并沒有運行最新版本的Android系統。
??說到性能,Kotlin也沒有帶來任何負面影響。Kotlin編譯器生成的代碼執行起來和普通的Java代碼效率一樣。Kotlin使用的運行時(庫)體積相當小,所以編譯出來的應用程序包體積也不會增加多少。當你使用Lambda的時候,它們會被許多Kotlin標準庫函數內聯,Lambda的內聯確保不會創建新對象,因此應用程序也不必忍受額外的GC暫停。
??看過了和Java相比Kotlin的優勢之后,我們再來看看Kotlin的設計哲學---那些把Kotlin和其他面向JVM的現代語言區分開的主要特性。

1.4 Kotlin的設計哲學(此處全部借鑒《Kotlin實戰》中文版)

??當談起Kotlin的時候,我們喜歡說它是一門務實,簡潔和安全的語言,專注于互操作性。這里的每個詞語究竟是什么含義?我們逐個來看看。

1.4.1 務實

??務實對我們來說意味著一件簡單的事情:Kotlin就是一門設計出來解決現實世界問題的實用語言。它的設計基于多年創建大型系統的工業經驗,它的特性也是為解決許多軟件開發者遇到的場景而選擇的。此外,來自JetBrains內部和社區的開發這已經使用Kotlin的早期版本很多年,他們的反饋也被融合進了這門語言公開發布的版本中。所以我們才能自信的說,Kotlin能夠幫助解決實際項目的問題。
??Kotlin也不是一門研究性的語言。我們沒有試圖提升編程語言設計領域目前的技術水平,也沒有嘗試探索計算機科學的創新理念。反而,我們會盡可能地依賴已經出現在其他編程語言中并被證明是成功的那些特性和解決方案。這降低了語言的復雜性,也讓它更容易學習,因為你可以仰仗那些熟悉的概念。
??此外,Kotlin也沒有強制使用某種特定的編程風格和范式。當你開始學習這門語言的時候,可以使用熟悉的來自Java經驗的風格。然后,你會漸漸地發現更多強大的Kotlin特性,并學習把它們應用到你的代碼中,讓代碼更簡潔,更符合語言習慣。
??Kotlin的使用主義的另外一個重要體現是對于工具的專注。對開發者的生產力而言,一個智能的開發環境和一門設計良好的語言同樣重要。因此,事后再來考慮對IDE進行支持就是馬后炮。而Kotlin的情況是,IntelliJ IDEA的插件是和編譯器同步開發的,并且在設計語言特性時始終牢記著對工具的支持。
??IDE支持對幫助你探索Kotlin的特性也發揮著重要作用。許多情況下,工具會發現那些可以用更簡潔的結構來替換的通用代碼模式,并給你提供修正這些代碼的選擇。通過研究自動修正所使用的語言特性,你就能學習如何在自己的代碼中應用這些特性。

1.4.2 簡潔

??和編寫新代碼相比,開發人員會耗費更多的時間來閱讀現有的代碼,這已經是常識。想象一下你所在的團隊正在開發一個大項目,而你的工作是添加一個新特性或者修改bug。第一步會干什么?首先要找到需要改變的那段代碼,然后才能實現你的修改。要閱讀很多代碼才能知道你要做什么。這些代碼可能最近剛完成,由你的同事或者是那些已經離開的同事編寫,或者是你自己很久之前寫好的。只有搞懂了周圍的代碼你才能做出正確的改動。
??代碼越簡單月簡潔,你就能越快地了解發生了什么。當然,良好的設計和達意的命名在這里起著重要的作用。但語言的選擇及其簡潔也很重要。如果語言的語法清晰地表達了被閱讀的代碼的意圖,沒有因為達成意圖所需的樣板代碼而晦澀難懂,那么它是簡潔的。
??在Kotlin中,我們努力地保證你寫的代碼都具有實際的意義,而不是僅僅為了滿足代碼結構的需要。許多標準的Java樣板代碼,例如:getter,setter以及將構造方法的參數賦值給字段的邏輯,在Kotlin中都是隱式的,并不會是你的源代碼變得混亂。
??另外一個導致代碼變得不必要的冗長的原因是編程顯式的代碼來完成常見的任務,比如定位集合中的元素。和許多其他現代語言一樣,Kotlin有豐富的標準庫,讓你用庫方法調用來代替這些冗長重復的代碼段。Kotlin對Lambda表達式得到支持,讓小代碼塊可以輕松地傳遞給庫函數。這讓你可以把公共的那部分代碼全部封裝在庫中,而在用戶代碼中僅保留特定的針對任務的那部分。
??與此同時,Kotlin并沒有嘗試把源代碼壓縮到最小可能的長度。例如,即使Kotlin支持運算符重載,用戶也不能定義自己的運算符。因此,庫開發者不能用神秘的標點符號序列來代替方法名字。單詞比標點符號顯然更易懂,也更容易找到相關的文檔。
??越簡潔的代碼寫起來花的時間越短,更重要的是,談起來耗費的時間也更短。這回提高你的生產力并讓你更快地達成目標。

1.4.3 安全

??通常,我們說這一門編程語言是安全的,我們的意思是它的設計可以防止程序出現某些類型的錯誤。當然,這并不意味這絕對的高質量,沒有任何語言可以阻止所有可能出現的錯誤。此外,預防錯誤是需要成本的。需要給編譯器提供程序有預期操作更多的信息,這樣編譯器才能驗證這些信息是否和程序的功能匹配。因此,你要在得到的安全級別和因為增加更多細節注解而造成的生產力損失之間權衡權弊。
??使用Kotlin,我們試圖實現比Java更高的安全級別,同時保持更低的總體成本。在JVM上運行已經提供了許多的安全保證:例如,內存安全,防止了緩沖區溢出以及其他錯誤的動態內存分配造成的問題。作為面向JVM的靜態類型語言,Kotlin還保證了應用程序的類型安全。這比使用使用Java的成本要更低:不需要指定所有的類型聲明,因為許多情況下編譯器會自動地推斷出類型。
??Kotlin所做的不止這些,這意味著更多的原本在運行時失敗的錯誤在編譯期的檢查中就被阻止了。最重要的一點是,Kotlin努力地從你的程序中消除NullPointException。Kotlin的類型系統跟蹤那些可以或不可以為null的值,并且禁止那些運行時可能導致NullPointException的操作。這所帶來的額外的成本是極小的:把類型標記為空的只要一個字符,就是類型尾部的一個問號:

val s1 String? = null//可為空的String
val s2 String  = ""http://不可為空的String

??除此之外,Kotlin提供了許多便利的方法來處理可空數據。這非常有助于消滅應用程序的崩潰。
??Kotlin有助于避免的另一種異常類型就是ClassCastException。當你把一個對象轉換成一種類型,而沒有事先檢查它是否是正確的類型時,就會發生這個異常。在Java中,開發者常常省略了這類檢查,因為必須反復地在檢查和其后的轉換中寫明類型名稱。另一方面,Kotlin中的檢查和轉換組合成了一次操作:一旦檢查過類型,不需要額外的轉換就能直接引用屬于這個類型的成員。這樣,開發者就沒有借口跳過檢查,也不會給錯誤留下可乘之機。下面展示了它是如何工作的:

if(value is string) //檢查類型的異常
   println(value.toUpperCase()) //調用該類型的方法

1.4.4 互操作性

??關于互操作性,你的第一問題可能是:“我是不是可以繼續使用現有的庫?”Kotlin給出的回答是:“當然可以。”無論需要使用哪種庫提供的API,都可以在Kotlin中使用它們。可以調用Java的方法,繼承Java的類和實現Java的接口,在Kotlin類上應用Java的注解,等等。
??與其他一些JVM語言不同,Kotlin在互操作上更上一層樓,讓Java代碼也可以毫不費力地調用Kotlin的代碼。無須取巧:Kotlin的類和方法可以像常規的Java類和方法一樣被調用。這帶來了無限的靈活性,在項目的任何地方都可以混合使用Java和Kotlin。當你剛開始在自己的Java項目中引入Kotlin時,可以在代碼庫的任意一個類上運行Java和Kotlin的轉換器,剩下的代碼不需要任何修改就可以繼續編譯和工作。不管你所轉換的類是什么角色,這都是可行的。
??另一個Kotlin專注與互操作性的領域是在最大程度上使用現有的Java庫。例如,Kotlin沒有自己的集合庫,它完全依賴Java標準庫中的類,使用額外的函數來擴展它們,讓它們在Kotlin中用起來更方便。這意味著在Kotlin中調用JavaAPI時,永遠不需要包裝或者轉換這些Java對象,反之亦然。所有這些Kotlin提供的豐富的API在運行時沒有任何的額外開銷。
??Kotlin工具也對跨語言項目提供了全面支持。它可以編譯任意混合的Java和Kotlin源碼,不管它們之間是怎樣互相依賴的。IDE的特性也能跨語言工作,允許:
??(1)自由地在Java和Kotlin源碼文件之間切換。
??(2)調試混合語言的項目,可以在不同語言編寫代碼之中單步調試。
??(3)重構Java方法的時候,Kotlin代碼中的對它們的調用也會得到正確的更新,反之亦然。

??希望我們已經說服你嘗試一下Kotlin,現在,你要如何開始使用它?在接下來的一節中,我們將從命令行和其他不同工具的使用兩方面討論和運行Kotlin代碼的過程。

1.5 使用Kotlin工具(此處全部借鑒《Kotlin實戰》中文版)

??和Java一樣,Kotlin也是編譯型語言,這意味著你必須先編譯,然后才能執行Kotlin代碼。讓我們來討論一下編譯過程,然后看看幫助你完成這個過程需要的不同工具。如果你需要關于如何搭建開發環境的信息,請參考Kotlin官方網站的“Tutorials”(教程)一節(https://kotlinlang.org/docs/tutorials)。

1.5.1 編譯Kotlin代碼

??Kotlin的源代碼存放在后綴名為.kt的文件中。Kotlin編譯器會分析源代碼并生成.class文件,這和Java編譯器做的沒什么不同。然后按照你正在處理的應用程序類型的標準過程打包和執行生成的.class文件。最簡單的情況下,只需要使用kotlinc命令就可以從命令行編譯代碼,然后就可以用Java命令執行你的代碼:

kotlinc <source file or directory> -include-runtime -d <jar name>  
java -jar <jar name>  

??圖1.1展示了Kotlin構建過程的簡單描述。


??用Kotlin編譯器的代碼依賴Kotlin運行時庫。它包括了Kotlin自己的標準庫類的定義,以及Kotlin對標準Java API的擴展。運行時庫需要和你的應用程序一起分發。
??在大多數實際工作的例子中,你會使用像Maven,Gradle或者這樣的構建系統來編譯你的代碼。Kotlin和所有這些構建系統都兼容,我們會在附錄A中討論相關細節。所有這些構建系統也支持在同一代碼庫中既有Kotlin也有Java的混合語言項目。此外,Maven和Gradle還會幫你把Kotlin運行時庫作為依賴加入到你的應用程序中。

1.5.2 IntelliJ IDEA 和 Android Studio 插件

??IntelliJ IDEA的Kotlin插件和語言同步開發的,它是Kotlin可用的功能最全面的開發環境。它成熟且穩定,提供了Kotlin開發所需的全套工具。
??IntelliJ IDEA 15及其后續版本不需要額外的設置,Kotlin插件就可以開箱即用。可以選擇免費開源的IntelliJ IDEA Community版,也可以選擇IntelliJ IDEA Ultiamte。在“New Project”(新建項目)對話框中選擇“Kotlin”,然后就可以開始工作了。
??如果你用的是Android Studio,可以從“plug-in manager”(插件管理器)中安裝Kotlin插件。打開“Settings”(設置)對話框,選擇“Plugins”(插件),單擊“Install JetBrains Plugin”(安裝JetBrains插件)按鈕,然后從列表中選擇“Kotlin”。

1.5.3 交互式shell

??如果你想快速地嘗試小段的Kotlin代碼,可以使用交互式shell(也叫REPL3)。在REPL中,可以逐行地輸入Kotlin代碼并立即看到其執行結果,可以使用不帶任何參數的kotlinc命令啟動REPL,也可以從IntelliJ IDEA的“Kotlin”菜單中選擇啟動REPL。

1.5.4 Eclipse插件

??如果你是Eclipse用戶,同樣可以選擇在你的IDE中使用Kotlin。Kotlin的Eclipse插件提供了必要的IDE功能,如導航和代碼補全。該插件可以在Eclispe Marketplace 中找到。要安裝它,請選擇“Help>Eclipse Markerplace”菜單項,然后在列表中搜索“Kotlin”。

1.5.5 在線playground

??嘗試Kotlin的最簡單的方式,是不需要任何安裝和配置。可以在http://try.kotl.in找到在線的playground,可以在上面編寫,編譯及運行Kotlin的小程序。Playground上還展示了Kotlin特性的代碼示例,其中包括了本書所有例子。還有一系列交互式學習Kotlin的練習。

1.5.6 Java 到 Kotlin 的轉換器

??要熟練掌握一門新語言總是要費盡力氣的。幸運的是,我們開辟了一條很棒的小捷徑,讓你可以借助現有的Java知識來加快學習和運用Kotlin的速度。這個工具就是Java到Kotlin的自動轉換器。
??當你開始學習Kotlin的時候,如果你還沒有記住準確的語法,轉換器能幫你表達一些內容,可以先用Java寫出相應的代碼片段,然后把他粘貼到Kotlin文件中,轉換器會自動地將代碼轉換成Kotlin。轉換的結果不一定總是符合語言習慣,但是它一定是可以工作的代碼,這樣就可以讓你的任務更進一步了。
??在現有的Java項目中引入Kotlin時,轉換器也很好用。當你寫一個新類時,可以從一開始就用Kotlin。但是如果你要在一個現有的類上做重大的個更改時,可能也想在這個過程中使用Kotlin,這時轉換器就派上用場了。首先把這個類轉換成Kotlin,然后就可以利用現代編程語言的所有優勢來添加更改了。
??在IntelliJ IDEA 中使用轉換器再簡單不過了要么復制一段Java代碼粘貼到Kotlin文件中,要么觸發“Convert Java File to Kotlin File”(轉換Java文件到Kotlin文件)動作來轉換整個文件。也可以在Eclipse中或者線上使用轉換器。

1.6 小結

1.Kotlin是靜態類型語言并支持類型推導,運行維護正確性與性能的同時保持源代碼的整潔。

2.Kotlin支持面向對象和函數式兩種編程風格,通過頭等函數使更高級別的抽象成為可能,通過支持不可變值簡化了測試和多線程開發。

3.在服務器端應用程序中它工作得很好,全面支持所有現存的Java框架,為常見的任務提供了新工具,如生成HTML和持久化。

4.在Android上它可以工作,這得益于緊湊的運行時,對Android API特殊的編譯器支持以及豐富的庫,為常見Android開發任務提供了Kotlin友好的函數。

5.它是免費和開源的,全面支持主流的IDE和構建系統。

6.Kotlin是務實的,安全的,簡潔的,與Java可互操作性,意味著它專注于使用已經證明果的解決方案處理常見的任務,防止常見的像NullPointException這樣的錯誤,支持緊湊和易讀的代碼,以及提供與Java無限制的集成。

本篇文章內容全部是《Kotlin實戰中文版》第一章的內容,在寫此篇文章之前,筆者已經將《Kotlin實戰中文版》看了個大概,內容還是非常全面的,是值得一買的Kotlin學習好書籍,所以建議還是購買一本,筆者花了70元左右從網上購買的,相比于知識,這點錢不算啥。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容