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

與Java無縫兼容,Kotlin語言的優(yōu)缺點(diǎn)及建議

開發(fā) 后端
從Android 7.0開始,谷歌使用的API從Oracle JDK切換到了open JDK,這對于谷歌來說是一個(gè)艱難的決定。對于開發(fā)者來說,卻倍感興奮,這意味著長期的官司問題也許就此結(jié)束,Android系統(tǒng)開發(fā)又可以回歸到一個(gè)正常的軌道,持續(xù)給全球的安卓用戶帶來驚喜。

[[254482]]

從Android 7.0開始,谷歌使用的API從Oracle JDK切換到了open JDK,這對于谷歌來說是一個(gè)艱難的決定。對于開發(fā)者來說,卻倍感興奮,這意味著長期的官司問題也許就此結(jié)束,Android系統(tǒng)開發(fā)又可以回歸到一個(gè)正常的軌道,持續(xù)給全球的安卓用戶帶來驚喜。

Kotlin語言有什么優(yōu)勢?

Kotlin語言被贊譽(yù)為Android世界里的Swift.

簡單來說,可以這樣概括

  •  完全兼容Java
  •  Null safe
  •  支持lambda表達(dá)式(比Java8更好)
  •  支持?jǐn)U展
  •  體驗(yàn)一致的開發(fā)工具鏈

使用Kotlin對Android開發(fā)者意味著什么?

使用Kotlin開發(fā),對于安卓開發(fā)來說,主要有下面幾個(gè)有利的影響:

  •  更少的空指針異常
  •  更少的代碼量
  •  更快的開發(fā)速度
  •  更一致的開發(fā)體驗(yàn)

What is Kotlin

Kotlin語言是由JetBrains公司開發(fā),其初衷用于快速生成JavaScript代碼,而如今Kotlin已經(jīng)支持Android開發(fā),并提供了一系列的Android開發(fā)插件。由于JetBrains的天然優(yōu)勢(Android Studio就是在JetBrains公司開發(fā)的IDE上面添加了一些插件而成),Android Studio對Kotlin語言的支持也比較到位。

看一看Kotlin語言給我們帶來了什么。

Null Safe

空指針異常的確是困擾Java程序員很多年的問題,Swift語言巧妙地解決了這個(gè)問題,Kotlin采用了一樣的解決方案,只是語法形式不太一樣。

我們來和Java語言做一個(gè)簡單的對比:

Java 

  1. Room room = ...;  
  2. if(null != room && null != room.window) {  
  3.      room.window.open();  

Kotlin 

  1. val room: Room? = ...  
  2. room?.window?.open() 

從常識來說,我們知道,一個(gè)房間可能會(huì)有窗戶,也可能沒有窗戶,如果沒有窗戶,調(diào)用open方法自然就會(huì)出現(xiàn)空指針異常。Java語言的處理方式是在調(diào)用該方法之前進(jìn)行空值判斷,而Kotlin語言則使用?操作符進(jìn)行控制,意思就是,如果?前面的對象為空,則直接返回空值,后面的語句不再執(zhí)行。其有一個(gè)專業(yè)叫法: Optinal Value (可選值)

相對于Java語言,Kotlin語言的處理方式簡單了許多,更重要的是:媽媽再也不用擔(dān)心我的程序出現(xiàn)空指針異常了 -_-

細(xì)心的讀者應(yīng)該可以發(fā)現(xiàn),Kotlin語言將分號也去掉了,這和Swift語言的處理方式也是一致的。

關(guān)于Optional Value的具體用法,后面我會(huì)專門用一個(gè)章節(jié)來給大家講解,請期待后面我的Kotlin語言系列教程。

Function

在Kotlin語言中,類終于不再是一等公民。Kotlin語言開始支持面向過程編程,Kotlin語言中可以聲明全局函數(shù),內(nèi)聯(lián)函數(shù)等,還支持函數(shù)嵌套,使用函數(shù)作為方法參數(shù)等操作。對于一些簡單的操作,新建一個(gè)類去處理,的確有時(shí)候是一個(gè)讓人頭疼的問題,Kotlin語言終于讓我們擺脫了這一尷尬的現(xiàn)狀。

 

來看一看函數(shù)聲明的簡單寫法,也和Java語言做一個(gè)簡單的對比

Java 

  1. public Sting sayHello(String name) {  
  2.    return "Hello, " + name;  

Kotlin 

  1. fun String sayHello(name: String?): String {  
  2.    return "Hello, $name"  

函數(shù)的寫法有較大的不同,Kotlin語法類似Swift語言的寫法,每個(gè)函數(shù)都必須使用fun關(guān)鍵字聲明,參數(shù)類型在后,參數(shù)名稱在前,對于Java語言開發(fā)的同學(xué)可以需要一個(gè)短暫的適應(yīng)過程。

同樣地,我會(huì)在后面的文章中專門對Kotlin函數(shù)進(jìn)行講解

Lambdas

閉包應(yīng)該是Java程序員非常期待的一個(gè)特性,而且幸運(yùn)的是,Java8已經(jīng)開始支持這一特性。二者非常相似,我們來和Java8的閉包做一個(gè)簡單的對比

Java8 

  1. interface Sum {  
  2.     int add(int x,int y);  
  3.  
  4. Sum sum = (x,y) -> x + y 

Kotlin 

  1. val sum: (Int,Int) -> Int = { x,y -> x + y } 

可以看到,二者的語法非常類似,同樣支持類型推導(dǎo),支持簡寫;不同的是,由于Java語言完全面向?qū)ο蟮奶匦裕]包必須與接口一一對應(yīng),而Kotlin語言由于天然支持函數(shù)編程,可以不用聲明對應(yīng)接口,直接在參數(shù)中使用即可。

Extension

這是我最喜歡的一個(gè)特性,Kotlin語言支持對現(xiàn)有的類進(jìn)行擴(kuò)展。Java程序員應(yīng)該會(huì)對這個(gè)特性比較陌生,這也是Swift語言的一個(gè)特性之一。所謂擴(kuò)展,就是在不使用繼承的情況下,對現(xiàn)有的類新增方法,屬性等操作,擴(kuò)展不會(huì)破壞現(xiàn)有的類方法,僅僅在使用的時(shí)候進(jìn)行動(dòng)態(tài)添加。應(yīng)該記住一個(gè)原則: 擴(kuò)展優(yōu)于繼承

而這個(gè)特性Java語言并不支持。

Kotlin 

  1. fun MutableList<Int>.swap(index1: Int, index2: Int) {  
  2.       val tmp = this[index1] // 'this' corresponds to the list  
  3.       this[index1] = this[index2]  
  4.       this[index2] = tmp  

Data Class

在開發(fā)過程中,我們常常要不斷寫一些Model類,不斷地使用開發(fā)工具生成set/get方法。Data Class就是為簡化這個(gè)操作而生的,數(shù)據(jù)類會(huì)自動(dòng)生成set/get方法,而不用顯式生成set/get方法,看下面的簡單用法:

Kotlin 

  1. data class Person(var name: String?,var age: Int?) 

僅僅使用這樣一行代碼就完成Model類的創(chuàng)建,Kotlin會(huì)自動(dòng)幫我們生成set/get方法,極大地簡化了Model類的編寫工作。不過,Java程序員也不用太羨慕,很多Java框架也可以實(shí)現(xiàn)這一點(diǎn),比如Google推出的Auto Value框架等等

Operator Overloading

這個(gè)特性在Swift語言中也存在,在C++語言中也存在。這個(gè)特性是一把雙刃劍,使用操作符重載可以簡化使用,也會(huì)損失一些代碼可讀性。所以,在使用操作符重載的時(shí)候,請慎重考慮。

關(guān)于Kotlin語言的特性一時(shí)半會(huì)也說不完,下面我們就一些比較重要的特性和Java語言做一個(gè)簡單的對比:

語言特性 Kotlin Java
Null Safe 支持 Java8支持
全局函數(shù) 支持 不支持
Lambdas 支持 Java8支持
Extension 支持 不支持
Data Class 支持 不支持(需要依賴框架)
Operator Overloading 支持 不支持

Java語言完全互通

你可能會(huì)擔(dān)心使用Kotlin語言之后,之前的Java代碼怎么辦。這個(gè)擔(dān)心是完全多余的,JetBrains保證Kotlin和Java語言可以實(shí)現(xiàn)完全地互相調(diào)用,Kotlin最終也會(huì)編譯成Java字節(jié)碼。

Kotlin語言優(yōu)勢

有網(wǎng)友統(tǒng)計(jì),使用Kotlin語言大約可以減少30%的代碼編寫,同時(shí)也不用再擔(dān)心空指針異常,由于JetBrains的天然基因,Kotlin可以獲得較好的維護(hù)、升級。***,對于Oracle公司對Google的頻繁訴訟,這也算是一個(gè)很好的還擊。在Kotlin語言發(fā)布之后,國外已經(jīng)有很多開發(fā)人員推出了大量好用的Kotlin框架,你可以不用重復(fù)創(chuàng)造輪子。同時(shí),Kotlin語言可以和Java語言實(shí)現(xiàn)無縫連接,你還在等什么呢?

建議

對于Kotlin語言,大部分開發(fā)人員都對Kotlin語言抱有積極態(tài)度。我本人也非常推崇Kotlin語言,如果你熟悉類似Python,Ruby等腳本語言,亦或者熟悉Swift語言,Kotlin語言將是你不二的選擇。而如果你已經(jīng)厭倦了Java語言冗余繁雜的寫法,Kotlin語言也非常值得一試,相信你也會(huì)像我一樣愛上這門語言。  

責(zé)任編輯:龐桂玉 來源: Linux公社
相關(guān)推薦

2019-10-10 17:22:07

多云CIO多云策略

2018-12-11 10:59:35

Tomcat NginxApache

2019-11-15 13:26:17

編程語言微軟C語言

2009-06-19 18:36:15

JPAHibernate

2009-06-15 09:57:46

HibernateIBatis

2012-05-03 09:58:19

VLANVLAN劃分

2009-12-14 18:54:30

Ruby語言優(yōu)缺點(diǎn)

2017-10-23 13:20:37

2010-08-27 09:45:49

CSS Sprites

2014-05-12 09:26:08

2024-01-04 08:00:22

時(shí)序數(shù)據(jù)庫項(xiàng)目

2024-05-23 16:56:58

2009-08-10 17:41:42

C# Singleto

2019-05-28 15:20:17

2019-04-16 13:12:52

2010-09-02 09:59:52

CSS SpritesCSS

2009-12-04 11:02:00

PHP語言優(yōu)缺點(diǎn)

2011-07-11 09:32:54

VMware ToolVMware性能

2010-01-06 15:45:12

2021-10-09 09:52:17

云存儲公共云遷移
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩精品一区二区三区视频播放 | 亚洲日日夜夜 | caoporon| 成年人网站免费视频 | 亚洲一区二区三区 | 亚洲成人精品 | 精品欧美一区二区三区久久久 | av一区二区三区在线观看 | 欧美在线一区二区三区 | 在线视频91 | 国产一区二区三区高清 | 午夜成人免费视频 | 久久久精品网 | 黄色三级毛片 | 久草网在线视频 | 亚洲国产精品福利 | 成人一区av偷拍 | 精品国产免费人成在线观看 | 天天天久久久 | 91精品国产综合久久久久久首页 | 日韩aⅴ片 | 欧美色成人 | 久久久精品影院 | 尤物在线视频 | 国产精品1区2区3区 欧美 中文字幕 | 亚洲九色 | 日韩视频 中文字幕 | 成人综合久久 | 蜜桃视频一区二区三区 | 亚洲精品电影网在线观看 | 国产传媒在线观看 | 日日爱夜夜操 | 国产91一区二区三区 | 自拍 亚洲 欧美 老师 丝袜 | 在线观看中文字幕 | 欧美高清一区 | 全免一级毛片 | 久久久久久久一区二区三区 | 日韩色视频 | 农村黄性色生活片 | www.久久|