kotlin-30分鍾快速入門


1.定義變量

在kotlin中,通過var 或者 val 來定義,區別就是 val定義的變量只能讀不能修改,var則可以修改。

val a:Int = 1
//等價於java: final int i = 10;
a = 2 // 錯誤,變量a是只讀
var b:Int = 2
b = 15 // ok

kotlin中定義的變量的格式

[變量名]:[變量類型]

另一方面,kotkin中的整形既不是用int或Integer,而是使用Int,這里簡單介紹一下kotlin中的基本類型:數字、字符、Boolean、數組和字符串

kotlin關鍵字 對應java關鍵字 說明
Double Double 64位
Float Float 32位
Long Long 64位
Int Integer 32位
Short Short 16位
Byte Byte 8位
Arrya Object[]  
Boolean Boolean  
String String  
Any Object kotlin中使用Any來達到java中Object的作用

看來除了Int類型,其他的好像也和java中的差不多。這里只是簡單與java中對比介紹一下,后面會專門介紹這些基本類型與java中的異同。

變量類型可以省略

對於在定義的時候同時初始化的變量,可以省略變量類型,kotlin會根據初始化的值進行變量類型推斷

val a = 1       // a是Int類型,Long在則在后面加上L,如 10L
val b = 1.2     // b是Double類型,Float在后面加上f/F,如1.2f
val c = "test"  // c是String類型

2.定義方法(function)

fun sum(a: Int, b: Int): Int {
    return a + b
}

fun myPrint(a: Int) {
    print(a)
}

fun main(args: Array<String>) {
    print("sum of 3 and 5 is ")
    println(sum(3, 5))
}

注意的是

  • kotlin中任何東西都是對象,包括方法,所以方法的定義和變量類似

[方法定義]:[返回類型]{方法體}

  • 如果沒有返回,則可以省略返回類型(或者使用Unit)
  • 參數傳遞過來的變量是只讀的(val修飾)
fun someCall(a:Int){
    a = 2 //error
}

3.null檢查

在kotlin中,默認定義一個變量是不能為null

var a:Int = null        //compile error

var a:Int = someCallReturnNull()  // runtiem excetion:KotlinNullPointerException

那如果允許空,則需要在變量類型后加上'?'例如

var a:Int? = null

方法的類似,如果定義方法

fun someCall(): Int {
    return null //compile error
}

因為返回的類型為Int,是不允許為空的,如果要返回空怎么辦呢,一樣加上'?'

fun someCallWillReturnNull(): Int? {
    return null //ok
}

如果我們定義了不能為空的類型,去接受可能返回空的函數怎么辦,這個使用要用到另外一個符號'!!'

var a:Int = someCallWillReturnNull() //compile error
var b:Int = someCallWillReturnNull()!!
//變量也是同理

var c:Int? = null
var d:Int = c!! //當然這里肯定會跑出NPE,至少在編譯到時候不會報錯

其實可以簡單理解,使用!!修飾的變量,如果為null就會跑出NPE.例如a!! 可以理解

if(a==null){
    throw new NullPointExcetion();
}

空檢測是kotlin的一個特點,他規定如果某些方法會返回null則在處理這些返回時需要注意,否則認為是null安全的(即不用檢測null)

4.字符串模板

如果要在java中找個對應功能,可能就是String.format(),但是kotlin中的字符串模板更強大一點

var a = 1
// 簡單的變量替換
val s1 = "a is $a" 

a = 2
// 在字符串模板中使用一些字符串方法
val s2 = "${s1.replace("is", "was")}, but now is $a"

5.條件表達式

if表達式

常規的用法和java中類似

fun max(a: Int, b: Int):Int{
    var max: Int
    if (a > b) {
        max = a
    } else {
        max = b
    }
    return max
}

但是kotlin提供的一些語法糖,例如上面max等於a和b中的最大者,可以這樣寫

val max =if (a > b) { a} else { b }

注:kotlin總沒有  ? : 三元運算符

進一步,如果方法返回a和b中的最大者

fun max(a: Int, b: Int) = if (a > b) {a} else {b}

可見變量和方法其實有很共性的(其實對於kotlin都是對象)

when表達式

取代java中switch,

when(x){
    1 -> someCall1(x)
    2,3 -> someCall2(x)
    else -> someCall3(x)
}

6. 類型檢查和轉換

在java中,我們常常強轉一個類型會這么寫

if(obj instance MyObj){
    MyObj myObj = (MyObj)obj;
    myObj.someCall()
}

是不是感覺很冗余,kotlin抓住了這個痛點

if(obj is MyObj){
    obj.someCall() //已經轉換位MyObj類型
}

或者也可以這樣

if(obj !is MyObj){
   //do something
}
 obj.someCall() //已經轉換位MyObj類型

7.數字序列

kotlin中提供遍歷一組數字序列,例如 1到100 可以表示為 1..100

for (i in 1..100) { ... }

8.集合操作

遍歷

for (item in items) {
    println(item)
}

kotlin遍歷list或者map十分方便

//遍歷list
val items = listOf("apple", "banana", "kiwi")
for (item in items) {
    println(item)
}
//遍歷map
for ((k, v) in map) {
    println("$k -> $v")
}

檢查某個對象是否在集合中

when {
    "orange" in items -> println("juicy")
    "apple" in items -> println("apple is fine too")
}

使用lambda進行集合操作

這個有點類似java8中的stream

lists
.filter { it.startsWith("a") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { println(it) }

  

注:如果lambda的參數一個,可以省略,並且使用it來代替

小結

本人也是剛開始學習kotlin,上面只是對kotlin的一些基礎用法進行簡要介紹,大多參考官方文檔。kotlin的還有很多高階用法,后面還會繼續些文章介紹,一方面可以自己學習kotlin,另一方面可以分享自己所學的東西,和大家一起交流


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM