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)基本語法
- 基本型別 在.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
複製程式碼
- 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表示式以及擴充套件函式