成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么我們建議嘗試一下新穎簡潔的現代語言Kotlin

開發 后端
由于最近在客戶項目上有機會使用了Kotlin這門今年大熱的語言,所以在好幾個不同的場合都被要求做一些Kotlin相關的分享,在這個過程中被問到的最多的一個問題便是——我們為什么要嘗試Kotlin?
  • 對Android的***支持為迅速發展的Kotlin語言提供了額外的推動力,我們也正在密切關注Kotlin / Native(基于LLVM,可以將Kotlin代碼編譯為原生可執行文件)的進展。在使用Anko庫開發Android應用時,我們已經嘗到了空指針安全、數據類和易于構建DSL的甜頭。盡管初始編譯速度慢,且只有IntelliJ才提供***的IDE支持,但我們仍然建議嘗試一下這種新穎簡潔的現代語言。

由于最近在客戶項目上有機會使用了Kotlin這門今年大熱的語言,所以在好幾個不同的場合都被要求做一些Kotlin相關的分享,在這個過程中被問到的最多的一個問題便是——我們為什么要嘗試Kotlin?

 

[[219942]]
(圖片來自:http://suo.im/4hXHdp)

實際上客戶早在去年年初的時候便已經完成了他們的后端技術選型,而Kotlin在那個時候便已經成為了項目構建后端微服務的主要語言。所以在這些分享中我并沒能給出一個很好的答案,而這個問題本身也引起了我的思考。

首先我們看看Kotlin語言的特點,官方羅列了4個顯著的特點:

  • 簡潔 Consice
  • 安全 Safe
  • 友好的開發工具 Tool-friendly
  • 和Java的互操作性 Interoperable

簡潔 Concise

Kotlin的簡潔體現在很多方面,對于Java程序員來說,最直接的體現便是在Kotlin語法中直接省略了分號,并且在構造一個類的實例時省略了new關鍵字,下面便是一段標準的Kotlin代碼:

 

  1. fun sayHi(name: String): String { 
  2.     val sb = StringBuilder(str = "Hi "
  3.     sb.append(name
  4.     return sb.toString() 

讓我們再看一個Kotlin官網的示例代碼,來體會一下Kotlin的簡潔:

  1. data class Customer(val name: String, val email: String, val company: String) 

簡單的一行代碼便實現了一個包含了constructor以及默認getters, toString, equals, hashCode和copy實現的Pojo,而同樣的java實現需要大概50多行代碼, 即便是在Lombok的幫助下仍然需要十幾行代碼。

Kotlin還在Java集合類的基礎上進行了封裝,并提供了非常豐富的集合操作。同時結合非常簡潔的Lambda表達式,使得調用更加精簡。

 

  1. val numbers = 1..10 
  2. val doubles = numbers.map {it * 2} 
  3. val sumOfSquares = doubles.fold(0) {x,y -> x+y} 

除了這些,Kotlin還提供了很多類似字符串模板、標準函數庫、運算符重載的特性,這些特性使得代碼可以非常簡潔易讀,極大提升了開發者的體驗。

從實際項目來看,Kotlin的簡潔在代碼量上表現的非常明顯,一個提供了24個API的Spring Boot微服務,通過Kotlin編寫的代碼量在8000行左右(含測試代碼)。同樣規模的微服務用Java編寫的情況下代碼量將遠大于這個數字。

安全 Safe

許多編程語言(包括 Java)中最常見的陷阱之一是訪問空的指針,導致空指針異常。Kotlin的安全性主要體現在它對Null-Safety的支持上。能夠使代碼在編譯期間就察覺到可能的NullPointerException,讓Java developer能夠輕松擺脫NullPointerException。

 

  1. var output: String 
  2. output = null // Compilation error 
  3.  
  4. val name: String? = null // Nullable type 
  5. println(name.length()) // Compilation error 

同時Kotlin還提供了一些自動轉型及類型推斷的特性,在提供安全檢查的同時也帶來了便捷。

下面也是一個來自官網的樣例,Kotlin在類型檢查得到true后,自動完成了Any到Invoice類型的轉換:

 

  1. fun calculateTotal(obj: Any) { 
  2.     if (obj is Invoice) 
  3.         obj.calculateTotal() 

友好的開發工具 Tool-friendly

這個特點就不用多說了,引用官網那句傲嬌的原話就是 “It’s what we do best!”

和Java的互操作性 Interoperable

簡單來說這個特性就是Kotlin和Java是可以相互調用的。

這意味著我們可以利用任何已有的Java libraries來構建我們的應用,讓我們無需放棄我們所熟悉的一切便可以享受Kotlin給我們帶來的愉快的編程體驗。

 

  1. ... 
  2. import org.springframework.data.jpa.repository.JpaRepository 
  3. import org.springframework.data.jpa.repository.JpaSpecificationExecutor 
  4. ... 
  5.  
  6. interface AreaRepository : JpaRepository<AreaEntity, Long>, JpaSpecificationExecutor<AreaEntity> { 
  7.     fun existsByAreaId(id: UUID): Boolean 
  8.     fun findOneByAreaId(areaId: UUID): AreaEntity? 

例子中是項目上一個用Kotlin編寫的基于Spring JPA的Repository,可以看到得益于Interoperable的特性,在嘗試使用Kotlin時我們可以依賴的是一個完整的Java生態圈。我們依然可以使用我們所熟悉的框架、構建工具、開發工具和測試工具。

 

[[219943]]

如何開始?

看了這么吸引人的語言特性,或許你已經忍不住想要嘗試Kotlin了。但是實際情況可能是項目已經開始了一段時間,我們已經用Java為項目構建了很多功能。這個時候引入一個新的語言可能會給項目帶來一定的風險。那么我們可以如何開始呢?

使用Kotlin編寫單元測試

如果你比較保守,那么你可以開始嘗試在項目中僅通過Kotlin來編寫單元測試,同樣得益于Interoperable這個特性,我們可以輕松的使用Kotlin來為Java類編寫單元測試。這樣你可以不用擔心嘗試Kotlin為你的業務代碼帶來風險,同時也可以在編寫單元測試的過程中嘗試Kotlin語言的各種特性。

使用Kotlin來擴展

你還可以使用Kotlin來豐富項目中所用到的Library,使用Kotlin Extensions來在不需要繼承的情況下完成對原有類型的擴展。或者直接通過Kotlin來編寫工具類為項目服務。

 

  1. //Extensions.kt 
  2. fun String.lastChar() = this.get(this.length - 1) 
  3. fun KPerson.fullName() = "${this.firstName} ${this.lastName}" //String template 
  4.  
  5. //Java JUnit test 
  6. Test 
  7. public void lastChar() throws Exception { 
  8.  assertEquals('n', Extensions.lastChar("Kotlin")); 
  9.  
  10. Test 
  11. public void fullName() throws Exception { 
  12.   KPerson k = new KPerson("Foo""Bar", Gender.MALE, 18); 
  13.   assertEquals("Foo Bar", Extensions.fullName(k)); 

使用Kotlin來重寫微服務

如果你在使用基于Spring Boot的微服務,那么完全可以挑選一個優先級較低的服務逐步通過Kotlin進行改寫。你會發現這個轉變會發生的無比順滑。因為Kotlin不會改變你之前通過Spring Boot構建微服務的方式。

這三個方法都可以讓你在風險可控的情況下嘗試Kotlin。讓你在感受Kotlin語言帶來的美好編程體驗的同時,使整個團隊逐漸熟悉Kotlin語言。你將會發現對于一個Java程序員來說,學習Kotlin真的是一件非常容易的事情,可以說一旦開始你就再也回不去了。

技術雷達

正在我們還在猶豫是否要嘗試Kotlin的時候,***一期技術雷達上Kotlin的表現又給了我們一個難以抗拒Kotlin的理由。雖然在雷達的描述中,我們更關注的是Kotlin在Android Native領域的影響力,但是隨著Spring社區對Kotlin的支持和更過成功項目的出現,相信Kotlin會繼續向雷達的圓心邁進。

責任編輯:未麗燕 來源: 程序師
相關推薦

2020-10-15 11:18:13

Linux內核虛擬機

2022-08-08 10:09:08

Vitest單元測試

2021-01-21 07:31:11

Filter框架權限

2016-08-22 13:31:05

前端架構前后端分離

2010-12-06 09:10:02

LightSwitch

2022-03-02 10:53:22

Postman工具開發

2022-06-29 10:04:01

PiniaVuex

2023-02-08 09:02:05

VS Code摸魚神器

2022-12-03 18:24:13

數據能力場景

2018-05-30 14:49:51

編程語言API語法

2017-07-14 14:12:10

AndroidRecyclerVie

2016-09-27 21:25:08

Go語言Ken Thompso

2010-11-03 09:22:00

C語言

2021-04-27 07:52:18

SQLNULLOR

2021-08-09 09:39:59

Docker部署鏡像

2022-12-12 07:30:59

編程語言架構

2013-11-20 13:41:32

IE微軟解決方法

2018-03-24 21:11:17

AI智慧城市交通

2012-04-11 09:19:08

Haskell編程

2021-04-13 07:29:13

Swagger3接口Postman
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产乱码精品一区二区三区中文 | 欧美一级在线免费观看 | 国产一区二区三区 | 一区二区三区国产好的精 | 91精品国产综合久久久久久蜜臀 | 两性午夜视频 | 欧美精品久久久 | 精品欧美在线观看 | 亚洲欧美中文日韩在线v日本 | 日本不卡一区 | 欧美一级欧美三级在线观看 | 精品一区二区三区四区五区 | 日韩视频在线观看 | 精久久 | 精品在线一区 | 午夜免费视频 | www.婷婷| 久久精品久久久久久 | 亚洲精品不卡 | 精品国产乱码久久久久久闺蜜 | 国产精品一区二区免费 | 日韩精品免费一区二区在线观看 | 美女三区| 麻豆精品久久 | 色综合久 | 国产成人网 | 久久国产精品-久久精品 | 美女久久久久久久久 | 久久伊人操 | 国产精品激情 | 91中文字幕在线 | 国产精品免费视频一区 | 精品亚洲91 | 新av在线| 91免费视频观看 | 免费人成在线观看网站 | 免费在线观看成人av | 国产精品爱久久久久久久 | 久久亚洲美女 | 国产精品不卡一区二区三区 | 亚洲精品久久久一区二区三区 |