Android宣布支持Kotlin

這次Google I/O大會宣布android支持Kotlin作為開發(fā)語言前硫,Kotlin是一種設(shè)計(jì)精妙的語言痛悯,相信回事Android開發(fā)更快更有趣典阵,已經(jīng)被一些主要的開發(fā)商作為應(yīng)用程序開發(fā)所使用攒岛,Kotlin也和Java能夠很好的同時使用舆绎,兩種語言之間可以輕松的相互操作花吟。

Kotlin插件已經(jīng)與Android Studio 3.0綁定了秸歧,所以你現(xiàn)在可以下載Android Studio 3.0的預(yù)覽版使用,Kotlin是被JetBrains公司開發(fā)的衅澈,而Intellij也是由該公司開發(fā)的键菱,所以對于Kotlin的支持并不奇怪。

除了IDEA支持之外今布,Google還宣布與JetBrains進(jìn)行合作,將Kotlin作為一種非盈利的基礎(chǔ)來推動侵蒙。

say "Hello" to Kotlin

Kotlin與java很類似

package helloworld

fun main(args:String){
  println("Hello World!");
}

乍一看傅蹂,你會看到大括號纷闺,類,包犁功,方法婚夫,但是隨著學(xué)習(xí)的深入浸卦。例如,也許你會問為什么要實(shí)現(xiàn)一些getter和setter等樣板類代碼以及需要覆蓋equals案糙,hashCode和toString等方法,以下是java語言的典型示例

public class Customer {
   private String name;
   private String email;
   private String company;

   public Customer(String name) {
       this(name, "", "");
   }

   public Customer(String name, String email) {
       this(name, email, "");

   }

   public Customer(String name, String email, String company) {
       this.name = name;
       this.email = email;
       this.company = company;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public String getEmail() {
       return email;
   }

   public void setEmail(String email) {
       this.email = email;
   }

   public String getCompany() {
       return company;
   }

   public void setCompany(String company) {
       this.company = company;
   }

   @Override
   public boolean equals(Object o) {
       if (this == o) return true;
       if (o == null || getClass() != o.getClass()) return false;

       Customer customer = (Customer) o;

       if (name != null ? !name.equals(customer.name) : customer.name != null) return false;
       if (email != null ? !email.equals(customer.email) : customer.email != null) return false;
       return company != null ? company.equals(customer.company) : customer.company == null;
   }

   @Override
   public int hashCode() {
       int result = name != null ? name.hashCode() : 0;
       result = 31 * result + (email != null ? email.hashCode() : 0);
       result = 31 * result + (company != null ? company.hashCode() : 0);
       return result;
   }

   @Override
   public String toString() {
       return "Customer{" +
               "name='" + name + '\'' +
               ", email='" + email + '\'' +
               ", company='" + company + '\'' +
               '}';
   }
}

使用Kotlin裆熙,你就不需要寫那些代碼了禽笑,下面這一行代碼與上面的整個類相同

data class Customer(var name:String,var email:String="",var company:String="")

Kotlin歷史

Kotlin的出現(xiàn)已經(jīng)有一段時間了僚稿,在2011年就已經(jīng)被宣布了蟀伸,并且第一次預(yù)覽版在2012年發(fā)布蚀同,Kotlin 1.0版本在2016年發(fā)布,而JetBrains也一直致力于維護(hù)Kotlin的穩(wěn)定性以及兼容性啊掏。
你可以在https://kotlinlang.org找到優(yōu)秀的學(xué)習(xí)資料和參考資料蠢络,Android團(tuán)隊(duì)發(fā)現(xiàn)Kotlin Koans教程作為開始編寫Kotlin片段的一種快速學(xué)習(xí)方式是非常有用的,這些教程的范圍從簡單到復(fù)雜迟蜜。

為什么是Kotlin

為什么Android團(tuán)隊(duì)決定支持Kotlin刹孔,最重要的是,這是因?yàn)閍ndroid團(tuán)隊(duì)認(rèn)為Kotlin是一種偉大的語言娜睛,將使Android應(yīng)用程序開發(fā)起來更輕松髓霞,更愉快。

Kotlin也是現(xiàn)有Android生態(tài)系統(tǒng)的絕佳搭檔畦戒,他與Java語言100%兼容方库,你可以根據(jù)需要將Kotlin添加到現(xiàn)有的代碼庫中,并且在同一個項(xiàng)目中自由使用兩種語言障斋。

最終纵潦,很多開發(fā)者都說他們很喜愛Kotlin變成語言,Android官方團(tuán)隊(duì)的很多開發(fā)者也這樣說垃环,已經(jīng)有一個熱衷于Android的Kotlin開發(fā)社區(qū)邀层,Android團(tuán)隊(duì)經(jīng)常在公開活動中對Kotlin提出疑問,而且已經(jīng)得到了反饋晴裹。

快速預(yù)覽

為了幫助你們了解Kotlin被济,這里有一個快速的但是不完整的Kotlin之旅。

Nullable

Kotlin編譯器強(qiáng)制可以顯示的聲明可以為空值的變量涧团。因此在運(yùn)行過程中不會出現(xiàn)空指針異常只磷。

var neverNull: String="something"
var mightBeNull:String?=null //?表明可以為null
if(neverNull.length>0){ 
}
if(mightBeNull.length>0){ //編譯器會捕獲這個錯誤
}

命名參數(shù)和默認(rèn)的參數(shù)

fun orderPizza(size: Size, pepperoni: Boolean, mushrooms: Boolean,
               ham: Boolean, pineapple: Boolean, pickles: Boolean,
               sausage: Boolean, peppers: Boolean, onion: Boolean)
{
    ...
}

// Wait… did I just order pickles on my pizza?
// Why do we even have that option?
orderPizza(Size.LARGE, true, false, false, false, true,
           false, true, false)

設(shè)置默認(rèn)值

fun orderPizza(size: Size,
               pepperoni: Boolean = false,
               mushrooms: Boolean = false,
               ham: Boolean = false,
               pineapple: Boolean = false,
               pickles: Boolean = false,
               sausage: Boolean = false,
               peppers: Boolean = false,
               onion: Boolean = false)
{
    ...
}

orderPizza(Size.LARGE, ham = true, mushrooms = true)

這樣寫減少了需要重載的函數(shù)的數(shù)量

when表達(dá)式

when{
  password.equals("password") -> println("Insecure password")
  password.length < 4 -> println("Too short")
  else -> {
    println("Secure password")
  }
}

智能轉(zhuǎn)換

如果你需要將一個對象轉(zhuǎn)換成另外一個對象的時候,需要使用instance of來進(jìn)行測試泌绣,但是Kotlin就不需要這么做了

if(obj is String){
  //編譯器將obj轉(zhuǎn)換成String
  if(obj.length>0){
    ...
  }
}

Kotlin中

when (obj){
  is Cat -> obj.meow(...)
  is Dog -> obj.woof(...)
  else -> {
  }
}

擴(kuò)展方法

Kotlin將新方法定位到現(xiàn)有的類型上钮追,如果你希望String類有一個toPigLain方法,你可以自己添加阿迈,而無需創(chuàng)建一個新的幫助類元媚。

//"String."表明這些方法應(yīng)該繼承現(xiàn)有的String類
fun String.toPigLatin():String{
  ...
}
val plainOldString:String = "some text"

println("some text".toPigLatin())

解構(gòu)賦值

我們前面已經(jīng)見識到了可以輕松定義一個簡單的類:

data class Order(val itemCode:String,val quantity:Int,val price:Float)

fun getOrder(...):Order{
    return Order(itemCode,quantity,price)
}

要得到所有的方法,你可以使用解構(gòu)聲明語法,以下語句使用Order對象刊棕,提取其三個屬性炭晒,然后分配給三個變量,這些變量都是由Kotlin編譯器提供的甥角,這里為你推薦了正確的類型网严。

val(what,howMany,howMuch) = getOrder(...)

lambdas表達(dá)式

Kotlin對于Lambda有非常簡潔的語法,可以很容易表達(dá)強(qiáng)大的變成范例嗤无,這是一個簡單的例子震束,它使用lambda來測試集合中的所有內(nèi)容都是String:

fun allString(collection:Collection) = collection.all{it is String}

fun generatePage(withEmphasis : Boolean) {
    val result =
        html {
            head {
                title { +"Kotlin Builders" }
            }
            body {
                h1 { +"Kotlin Builders" }
                p {
                    +"This is "
                    if (withEmphasis) b { +"really " }
                    +"interesting"
                    a() { +"More here" }
                }
            }
        }
    println(result)
}

入門

如果你想使用Kotlin入門,你可以直接使用這個代碼当犯,在你的app中嘗試使用Kotlin垢村,通過如下步驟:

  • 下載Android Studio 3.0
  • 打開已經(jīng)存在的java文件
  • 調(diào)用Code > convert java file to kotlin file
    IDE將會添加Kotlin依賴到你的項(xiàng)目中,然后轉(zhuǎn)換java代碼到koelin代碼嚎卫。

參考文章

原文地址:https://android-developers.googleblog.com/2017/05/android-announces-support-for-kotlin.html

Kotlin入門:https://developer.android.com/kotlin/get-started.html

Kotlin學(xué)習(xí)資料:https://developer.android.com/kotlin/resources.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嘉栓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子驰凛,更是在濱河造成了極大的恐慌胸懈,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恰响,死亡現(xiàn)場離奇詭異趣钱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)胚宦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門首有,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人枢劝,你說我怎么就攤上這事井联。” “怎么了您旁?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵烙常,是天一觀的道長。 經(jīng)常有香客問我鹤盒,道長蚕脏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任侦锯,我火速辦了婚禮驼鞭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尺碰。我一直安慰自己挣棕,他們只是感情好译隘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洛心,像睡著了一般固耘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上皂甘,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天玻驻,我揣著相機(jī)與錄音悼凑,去河邊找鬼偿枕。 笑死,一個胖子當(dāng)著我的面吹牛户辫,可吹牛的內(nèi)容都是我干的渐夸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼渔欢,長吁一口氣:“原來是場噩夢啊……” “哼墓塌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奥额,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤苫幢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后垫挨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體韩肝,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年九榔,在試婚紗的時候發(fā)現(xiàn)自己被綠了哀峻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡哲泊,死狀恐怖剩蟀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情切威,我是刑警寧澤育特,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站先朦,受9級特大地震影響缰冤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烙无,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一锋谐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧截酷,春花似錦涮拗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鼓择。三九已至,卻和暖如春就漾,著一層夾襖步出監(jiān)牢的瞬間呐能,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工抑堡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摆出,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓首妖,卻偏偏與公主長得像偎漫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子有缆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

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