公共 課 App {
    public  static  void  main(String [] args){
        系統。出。println(“Hello World!”);
    }
}

以下將在

Kotlin中

打印“Hello World” 

fun  main(args:Array < String >){
    println(“Hello World!”)
}

一些差異是顯而易見的,例如缺少分號以及我們的代碼是多么簡潔。

科特林與 

Java的

為了了解Kotlin,讓我們仔細看看它的功能以及它們與Java的比較。

無安全性

我們將首先探索Kotlin最有用的功能之一 – 它支持null安全性。

在Java中,任何對象都可以


null

這意味著必須在整個代碼庫中添加運行時檢查以防止


NullPointerException

崩潰,這通常被

語言設計者

稱為

十億美元的錯誤

靜態 類 用戶 {
    字符串 名稱 ;
}

public  void  printUsername(User  user){
    如果(用戶。名字 !=  空){
        FOO(用戶。名。長度());
    }
}

在Kotlin中,對象的引用必須是可空的或非空的:

class  User(var  name:String ?)// name屬性可以為null
class  User(var  name:String)// name屬性不能為null

如果開發人員試圖將可以為空的對象傳遞給第二個類,則會發生編譯時錯誤。

安全呼叫運營商

以下對大多數Java開發人員來說非常熟悉。

所述


user

參數可以是


null

,所以需要運行時檢查以確保


NPE

避免。

void  printUsername(User  user){
    如果(用戶。的getName()!=  空){
        FOO(用戶。的getName()長度());
    } else {
        foo(null); //提供一個null整數
    }
}

void  foo(整數 長度){}

Kotlin可以通過


Safe Call

 

操作員

簡化這一過程  

如果


name

不為null,則其長度將作為參數傳遞。

否則,將傳遞空引用。

fun  printUsername(user:User){
    FOO(用戶。名字?。長度)如果user.name為空//返回null
}

fun  foo(length:Int ?){}

或者,如果在值為null時執行代碼沒有意義,我們可以使用


let

fun  foo(nullableUser:User ?){
    nullableUser ?。let { printUsername(nullableUser)} //只打印非空用戶名
}
fun  printUsername(user:User){} // User是非空引用

類定義

與Java相比,

Kotlin 

非常簡潔。

下面的類定義了三個字段,getter和setter超過30行!

class  User {
    最終 字符串 名稱 ;
    int  age  =  18 ;
    字符串 地址 ;

    public  User(String  name,int  age,String  address){
        這個。name  =  name ;
        這個。年齡 =  年齡 ;
        這個。地址 =  地址 ;
    }

    public  String  getName(){
        返回 名稱 ;
    }

    public  int  getAge(){
        回歸 年齡 ;
    }

    public  void  setAge(int  age){
        這個。年齡 =  年齡 ;
    }

    public  String  getAddress(){
        返回 地址 ;
    }

    public  void  setAddress(String  address){
        這個。地址 =  地址 ;
    }
}

在Kotlin中,我們可以使用一行代碼實現相同的功能。

class  User(val  name:String,var  age:Int  =  18,var  address:String ?)

不可變引用也更容易。

這只是從


var

關鍵字

切換

到的問題


val

您可能已經注意到,對于Kotlin,可以為參數提供默認值。

這意味著

可以在Kotlin中消除

Java模式,例如

Builder模式 

這也可以大大減少語法糖所需的代碼量,例如公共API中的方法鏈。

數據類

如果我們類的主要目的是保存數據,例如來自API的JSON有效負載,事情會變得更加簡潔。

在Kotlin中,這些被稱為

數據類

data  class  User(val  name:String,var  age:Int  =  18,var  address:String ?)

只需添加


data

關鍵字會自動生成


equals()


hashCode()


toString()

,并


copy()

為我們的類實現。

省略了此類的等效Java實現,以節省讀者的理智和帶寬成本。

類型推斷

Kotlin使用類型推斷,這進一步增加了它的簡潔性。

考慮一下這個Java類:

class  AbstractSingletonProxyFactoryBean {}

public  void  foo(){
    AbstractSingletonProxyFactoryBean  bean  =  new  AbstractSingletonProxyFactoryBean();
}

而Kotlin中的等價物看起來像這樣:

class  AbstractSingletonProxyFactoryBean

fun  foo(){
    val  bean  =  AbstractSingletonProxyFactoryBean()//自動推斷類型
}

功能

類型推斷滲透到整個語言中。

在需要時可以是顯式的或隱式的,如下面定義相同函數的兩種方法所示:

int  add(int  a,int  b){
    返回 a     b ;
}

fun  add(a:Int,b:Int):Int { //顯式返回類型
    返回 a     b
}

fun  add(a:Int,b:Int)=  a     b  //推斷的返回類型

屬性

Kotlin 

Properties

簡直太棒了。

考慮以下Java類,它使用訪問器方法定義單個字段:

class  Book {
    字符串 作者 ;

    String  getAuthor(){
        回歸 作者 ;
    }

    void  setAuthor(String  author){
        這個。作者 =  作者 ;
    }
}

書 書 =  新的 圖書();
書。setAuthor(“Kurt Vonnegut”);
系統。出。的println(書。getAuthor());

通過定義聲明


author

屬性

的類,可以在Kotlin的四行中實現等效功能

我們將自動生成我們的getter和setter:

class  Book(var  author:String ?)
val  book  =  書()
書。author  =  “Kurt Vonnegut”
println(書。作者)

自定義訪問者

如果getter和setter需要自定義行為,則可以覆蓋默認行為。

例如:

class  Person(var  firstName:String,var  lastName:String){

    var  fullName:String
        get()=  “$ {firstName} $ {lastName}”
        set(value){
            val  split  =  value。拆分(“”)
            firstName  =  split [ 0 ]
            lastName  =  split [ 1 ]
        }
}

如果我們需要驗證字段或將其限制為某些輸入,

也可以使用

支持字段

set(value){
    如果(“圣誕老人”。等于(值))字段 =  “蠔HO”
}

互通性

Kotlin的另一個優點是可以從同一個項目中的Java代碼中調用它,反之亦然。

公共 類 MyJavaClass {
    public  String  authorName ;

    public  boolean  isTruthyValue(){
        返回 true ;
    }
}

以下Kotlin函數實例化一個新的Java對象,并使用常規的Kotlin語法訪問其方法和字段。

如果您想通過向現有Java代碼庫添加少量Kotlin來將腳趾浸入水中,這將非常方便。

fun  main(args:Array < String >){
    val  obj  =  MyJavaClass()
    的println(OBJ。AUTHORNAME)
    的println(OBJ。isTruthyValue)
}

還值得一提的是,Kotlin可以

反編譯回Java

,因此如果您的團隊不喜歡該語言或遇到技術障礙,那么完全可以遷移回來。

實用方法

所有Java開發人員都會非常熟悉實用程序或幫助程序類。

靜態方法將執行Java標準庫中不可用的一些有用操作,并將在代碼庫中調用:

class  StringUtils {
    static  String  sortStringChars(String  input){
        char [] chars  =  輸入。toCharArray();
        數組。排序(字符);
        return  new  String(chars);
    }
}
StringUtils。sortStringChars(“azbso”); //返回“abosz”

在Kotlin中,

擴展

允許將其他功能添加到現有類中,



無需擴展或包裝該類。

例如,以下內容將向

該類

添加一個


sortStringChars

函數


String

有趣的 字串。sortStringChars():String {
    val  chars  =  這個。toCharArray()
    數組。排序(字符)
    return  String(chars)
}

fun  main(args:Array < String >){
    “azbso”。sortStringChars()//返回“abosz”
}

這導致語法更易讀 – 但要注意。

強大的力量帶來了

巨大的責任

功能編程

Kotlin完全支持lambda表達式。

有限的Java 8支持剛剛

添加到Android中

,這使得Kotlin的功能編程功能特別受歡迎。

//為名稱以“J”開頭的所有作者篩選一個列表
val  input  =  listOf(“JK羅琳”,“查爾斯達爾文”)
val  authors  =  輸入。過濾器 { 作者 - >  作者。startsWith(“J”)}
println(作者)// JK羅琳

也可以

在Collections上

使用諸如


filter


map

直接

構造

,這在大多數Android設備上目前都不支持。

fun  main(args:Array < String >){
    val  input  =  listOf(“JK羅琳”,“查爾斯達爾文”,“”)
    val  authors  =  輸入。過濾 { !它。isEmpty()} //刪除空值
            。map { Author(it)} //將字符串映射到作者對象
            。sortedBy { it。name } //按作者名排序

    println(authors)//按字母順序打印作者
}

Reactive Streams最近在Android世界中流行起來,

RxKotlin

也為Kotlin提供了支持

val  cereals  =  listOf(“Kellogs Coroutines”,“Cocoa Pods”,“Locky Charms”)

谷物。toObservable()

    //在后臺線程上執行一些密集/復雜的計算

    。subscribeBy(onNext  = {
       println(it)//觀察主線上的每個谷物并打印出來
    })

Kotlin Native和Javascript

Kotlin主要針對JVM,但也可以

 使用LLVM工具鏈

轉換為Javascript

或編譯為本機代碼。

這兩個目標在開發階段還處于初期階段,但對于希望在整個堆棧中使用一種語言進行編程的人來說,這顯示了很大的希望。

Kotlin Native特別有趣,因為Swift 

看起來與Kotlin非常相似

,這意味著有朝一日可能會在Android和iOS應用程序中使用相同的本機代碼庫。

另一個值得一提的是

Gradle Script Kotlin

,它將靜態類型的所有好處帶到現有的Gradle DSL和

Spring Boot

,后者為Kotlin提供官方支持


1.5

潛在的下行

那么Kotlin的缺點是什么?

在Android上,應用程序大小是一個潛在的問題。

Kotlin目前

為您的應用程序大小

增加了大約

1Mb,

  并使用了大約7,000種方法,盡管其中大部分都可以被

Proguard

剝離

對于傳統的Java桌面應用程序來說,這不是什么大不了的事,但對于擁有更多資源限制的移動設備,這對某些團隊來說可能是一個交易破壞者。

Kotlin并沒有和Java一樣長,因此,識別不良做法和代碼味道要困難得多。

Java有22年的良好實踐和linting工具可供借鑒,而Kotlin卻沒有。

例如,擴展函數是一個非常強大的功能,但可以輕松地用于應該使用類和抽象的地方。

更人性化的因素是盡管Kotlin與Java非常相似; 

學習一門新語言總會有一段時間,這會導致生產力暫時下降。

特別是如果團隊中的每個人都在過去十年中成為Java專家,他們可能不愿意放棄并以他們不熟悉的語言重新開始。

外部客戶可能對Kotlin感到不太滿意,因為有人認為它與Java一樣久不存在,并且更為未知。

為什么Kotlin擊敗Java

讓我們總結一下Kotlin的一些主要優點:

科特林是


遠遠

比Java更簡潔

Lambdas和功能構造已經開箱即用多年

100%與現有Java代碼的互操作性

Kotlin實際上消除了最常見的Java錯誤之一,可怕的 


NullPointerException

IntelliJ IDEA提供出色的工具支持

這種語言是從頭開始編寫的,因此,它  


感覺

就像是每天都在其中編程的人設計的語言

我們認為,由于這些原因,Kotlin在Android上擊敗了Java。

在傳統的Java桌面應用程序中,由于Java 8包含可比較的語言功能,例如lambda,流和其他,因此它是一個更接近的競爭。

但是,我們仍然相信Kotlin的簡潔性在這種情況下獲勝。

關于Kotlin入門的建議

在一篇博客文章中總結一下編程語言是不可能的,所以如果你或你的團隊有興趣使用Kotlin,我們的建議只是試一試!

最常見的兩條路線是在Kotlin中編寫單元測試或將現有的Utils類轉換為Kotlin。

IntelliJ IDEA還提供了一個方便的自動轉換快捷方式,可將現有Java代碼遷移到Kotlin。

雖然這不一定會給你最慣用的Kotlin,但它是一種在你熟悉的代碼庫中學習語法的好方法。

最重要的是不斷評估每個人是否對Kotlin的采用水平感到滿意,并確定任何痛點或隱藏的陷阱。

Kotlin是Java的一個非常好的替代品,如果做得好,它有可能提高開發人員的快樂,降低代碼庫的復雜性,并提高業務的生產力。

更多關于云服務器域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » Kotlin初學者指南

登錄

找回密碼

注冊

主站蜘蛛池模板: 亚洲精品国产一区二区三区在线观看| 日韩一区二区三区精品| 亚洲AV无码乱码在线观看性色扶 | 亚洲熟女一区二区av| 九江县| 国产精品视频一区二区不卡| 四房播色综合久久婷婷| 成人免费A级毛片无码网站入口| 免费吃奶摸下激烈视频| 亚洲综合一区二区精品导航| 久久精品国产亚洲av麻豆软件| 亚洲高清日韩专区精品| 成人啪啪高潮不断观看| 欧美日本在线| 黑人av无码一区| 欧美性白人极品hd| 好吊视频一区二区三区在线| 国产综合色在线精品| 国产免费高清69式视频在线观看| 国产精品无码成人午夜电影| 不卡高清AV手机在线观看| 国产美女久久精品香蕉| 亚洲一区二区三区在线观看播放| 又湿又紧又大又爽A视频男| 亚洲国产精品久久久久久久| 国产精品福利一区二区久久| 亚洲一区二区精品偷拍| 无码国模国产在线观看免费| 一本高清码二区三区不卡| 国产精品丝袜亚洲熟女| 亚洲日本韩国欧美云霸高清| 久9re热视频这里只有精品免费| 在线综合亚洲欧洲综合网站| 北宁市| 国内极度色诱视频网站| 超碰人人超碰人人| 撕开奶罩揉吮奶头高潮AV| 国产女同一区二区在线| 黑人巨茎大战欧美白妇| 亚洲精品日韩久久精品| 国产精品乱码久久久久久小说|