Kotlin基礎教程(一)

ZENLovely發表於2018-06-07

Kotlin 教程(一)

很久沒有對一段時間的工作學習進行總結,所以想就近一個月使用kotlin程式設計,進行簡單的總結.首先,kotlin真的十分好用,在Android開發中,能體會到kotlin帶來便捷和靈活性.java程式設計師能十分友好的過渡到kotlin. 下面我將主要介紹下Android中的使用.

1)引入kotlin

AS3.0很好的支援了kotlin,建立一個新的.kt檔案,kotlin所依賴的庫基本都會導進來; module build.gradle 中

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions' 
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 
複製程式碼

專案 build.gradle中

 dependencies {
    	.....
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
複製程式碼

2)基本語法

  1. 基本型別 在.kt中 基本型別都類似於java中的包裝型別,比如:Int,Long,String,Boolean... 需要注意的是,當沒有被"?"申明時,這些物件是不可為null的,這也是kotlin能最大程度幹掉NPE的所在之處吧; 2)定義函式 無返回值eg:
fun sum(a:Int ,b:Int){
 println("$a plus $b = ${a+b}")
}
or
fun sum(a:Int ,b:Int):Unit{
 println("$a plus $b  =  ${a+b}")
}
複製程式碼

有返回值eg:

fun sum(a:Int ,b:Int):Int{
 return a+b
}
//注意的是,這裡返回值是Int,所以不允許返回null,如果允許返回值為null,這樣申明函式.
fun sum(a:Int ,b:Int):Int?{
 return null// 這裡允許返回null
}
or 
fun sum(a:Int ,b:Int)=a+b
複製程式碼
  1. if,for,when,rang等表示式的使用 eg:
if語句
fun maxOf(a:Int,b:Int)=if(a>b) a else b
上述函式類似於java三目運算 ;
kotlin 在型別可推斷時,可省略返回值型別的申明;

for語句
 val fruits = arrayOf("apple", "banana", "kiwi")
 	for(fruit in fruits){
 	println(fruit)
	}
or
fruits.forEach {println(it)} //當lamda表示式只有一個引數時,該引數可用it表示
 
when語句
 val fruits = arrayOf("apple", "banana", "kiwi")
        when {
            "orange" in items -> println("juicy")
            "apple" in items -> println("apple is fine too")
        }

or

fruits.forEach {
            when (it) {
                "apple", "banana" -> println("I love $it")
                else -> println("I don't love $it")
            }
        }

rang語句
val x=520;
if(x in 1..521){
	println("$x in range")
}


複製程式碼

4)區間迭代 eg:

列印1,3,5;step為1時可省略step
for(x in 1..5 step 2){
println(x)
}

or
for(x in 5 downTo 1 step2){
println(x)
}
複製程式碼

還有許多基本用法就不一一列出了,具體可以參考kotlin官方文件

3)建立類及例項

1)與java不同的是,kotlin預設所有class是不可以被整合的,類要被繼承,需要顯性用 open 來修飾 class;

eg:
主構造無參
open class Foo{
}
Sub class :Foo(){
} 
//Sub繼承Foo,主構造沒有引數時,在類申明時可以省略構造

主構造有參
open class Foo(p:String?){
	fun run1(){
		println("invoke run1 in Foo")
	}
	open fun run2(){
		println("invoke run2 in Foo")
	}
}
Sub(p:String?) class:Foo(p){
	 override fun run2() {
        super.run2()
    }
	//此處並未重寫父類方法
	fun run1(){
		println("invoke run1 in Sub")
	}
}

在kotlin中,建立新的物件,不需要new 關鍵字;
同樣的,函式也需要 open 修飾才能被子類重寫.
val foo=Foo("google Jang")
foo.run1().apply{run2()}
//列印:
invoke run1 in Foo
invoke run2 in Foo


複製程式碼

時間有限,先寫這些,下一篇將主要介紹lambda表示式以及擴充套件函式

相關文章