天天看點

Kotlin的第一行代碼

Hello Kotlin

在前段時間舉辦的Google I/O 2017上,Google宣布Kotlin成為Android官方的開發語言,這個最初釋出于2011年的語言在短短的時間内就吸引了大量的開發者,而Google使得它進入了更多人的視線。

Kotlin的第一行代碼

Kotlin是一種 開源的基于JVM的變成語言,由JetBeans公司開發(大概除了使用VS的.net開發者意外,都會或多或少聽說或使用過IDEA吧),名字取自聖彼得堡附近的一個小島(Koltin island)。

Kotlin是一種簡單的語言,其主要目标之一就是提供強大語言的同時又保持簡單且精簡的文法。其主要特性如下所示:

  • 輕量級:這一點對于Android來說非常重要。項目所需要的庫應該盡可能的小。Android對于方法數量有嚴格的限制,Kotlin隻額外增加了大約6000個方法。
  • 互操作:Kotlin可與Java語言無縫通信。這意味着我們可以在Kotlin代碼中使用任何已有的Java庫;是以,即便這門語言還很年輕,但卻已經可以使用成百上千的庫了。除此之外,Kotlin代碼還可以為Java代碼所用,這意味着我們可以使用這兩種語言來建構軟體。你可以使用Kotlin開發新特性,同時使用Java實作代碼基的其他部分。
  • 強類型:我們很少需要在代碼中指定類型,因為編譯器可以在絕大多數情況下推斷出變量或是函數傳回值的類型。這樣就能獲得兩個好處:簡潔與安全。
  • Null安全:Java最大的一個問題就是null。如果沒有對變量或是參數進行null判斷,那麼程式當中就有可能抛出大量的NullPointerException,然而在編碼時這些又是難以檢測到的。Kotlin使用了顯式的null,這會強制我們在必要時進行null檢查。
  • 更多特性可見官網

環境配置

對于大部分的安卓開發者而言,都是使用Android Studio(或IDEA)進行開發,當然也有很小一部分人仍然堅持使用eclipse,Kotlin對他們都進行了支援,甚至是可以隻是用控制台進行編譯。本文主要介紹Android Studio下的配置。

在Android Studio的歡迎頁中,點選右下角的"Configure",選擇"Plugin"進入插件管理界面。然後點選“Install JetBeans Plugin..”,查找Kotlin插件,點選Install即可安裝,成功後需要重新開機Android Studio

Kotlin的第一行代碼

項目的建立與配置

建立項目和建立普通的Android項目一樣,我們建立一個含有BaseActivity(命名為MainActivity)的項目,加載好之後,可以看到菜單欄Code下多了一個選項“Convert Java File to Kotlin file”。選中MainActivity.java,點選進行convert

轉換之前的代碼MainActivity.java:

package com.steveyg.hellokotlin;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
}
           

轉換之後的代碼MainActivity.kt:

package com.steveyg.hellokotlin

import android.os.Bundle
import android.support.design.widget.FloatingActionButton
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.Toolbar
import android.view.View
import android.view.Menu
import android.view.MenuItem

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

    }
}
           

在轉換之後,Android Studio會提示Kotlin not configured,此時雖然可以編譯成功,但是kotlin是無效的,點選Configure,根據自己的需要選擇需要配置的module即可

Kotlin的第一行代碼

之後點選Sync Now進行同步

Kotlin的第一行代碼

這樣在編譯後就可以看到kotlin實作的部分了。

第一行代碼hello world

作為程式員的傳統,當我們第一次接觸某種語言時,都會先寫出hello world,接下來我們便開始嘗試實作這個最簡單的kotlin APP。 首先,Module層的gradle中添加一行配置,然後再次通過Sync New進行同步

apply plugin: 'kotlin-android-extensions'
           

然後在布局檔案中添加一個TextView,設定其id為textview

<TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
           

回到MainActivity中,增加對于布局檔案的引用(比如此處我使用的是content_main.xml)

import kotlinx.android.synthetic.main.content_main.*
           

之後會發現,在onCreate裡面可以直接對id進行操作(比ButterKnife綁定還友善有木有),我們設定textview的内容為Hello world,編譯

textview.text = "hello world";
           
Kotlin的第一行代碼

相容Java

前文說過,Kotlin和Java是能夠互通的,這也給安卓開發者帶來了極大的友善,我們可以直接在現有的工程中使用kotlin的代碼,或者是根據它們的特性選用不同的語言,那麼他們是如何互通的呢。

1)Kotlin調用Java

首先,我們建立一個名為Demo的Java類,裡面隻含有一個傳回字元串的方法getType

package com.steveyg.hellokotlin.java;

public class Demo {
    public String getType(){
        return "Java";
    }

}
           

然後在MainActivity.kt中使用對這個類型的對象進行操作

var demo = Demo();
        textview.text = demo.type;
           

能夠看到,kotlin能夠直接使用java的内容,同時還對getset方法進行了處理,雖然在Demo對象中沒有type這個屬性,但是檢測到了getType方法,就自動處理為type這個屬性,其他的方法名(不含getset)能夠正常使用不會處理。

對工程進行編譯,可以看到内容如下圖

Kotlin的第一行代碼

我們看到textview的内容變成了Java.

2)Java調用kotlin

建立一個Kotlin類,命名為KotlinDemo

package com.steveyg.hellokotlin.kotlin

class KotlinDemo {
    fun getType(): String{
        return "Kotlin";
    }
}
           

再在上文的Java類(Demo.java)中增加一個方法,用于調用kotlin

public String getKotlinType(){
        return  new KotlinDemo().getType();
    }
           

然後再在MainActivity中進行調用

textview.text = demo.kotlinType;
           

再次編譯,結果見下圖

Kotlin的第一行代碼

可以看到,内容變成了Kotlin,說明調用成功。

其他

相比于Java,Kotlin的文法确實簡潔了不少,更像是一種腳本語言,對于那些習慣JavaScript和Python的開發者應該更容易上手。

本文中所有代碼見 github,想要更深的了解Kotlin,可參考 Kotlin官網以及 開發文檔