Kotlin 基本語法

包聲明

package xxx.xxx.xx

如:

package com.talent.kotlin

引入類

與Java沒啥區別

import java.util.*

有多個包會默認導入到每個 Kotlin 文件中:

kotlin.*
kotlin.annotation.*
kotlin.collections.*
kotlin.comparisons.*
kotlin.io.*
kotlin.ranges.*
kotlin.sequences.*
kotlin.text.*

函數定義

一般函數

函數定義使用關鍵字 fun,參數格式為

fun METHOD_NAME(PARAM1_NAME:PARA1_TYPE,PARA2_NAME:PARA2_TYPE):RETURN_TYPE{

    METHOD_BODY

    
}

例如:

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

表達式作為函數體,返回類型自動推斷:

fun testMethod(a: Int, b: Int) = a + b

如果方法為public ,則返回類型不可省略,必須明確寫出。如

public fun testMethod(a: Int, b: Int): Int = a + b

如果無返回值類型,Java中用的是Void,Kotlin中則用Unit表示,同樣可缺省,例如:

 fun testMethod3(a:Int,b:Boolean):Unit{
        print("test")
 }

 fun testMethod3(a:Int,b:Boolean){
        print("test")
 }

可變長參數函數

在Java中可變長參數一般這樣寫

public void output(String...args){
        for (String i:args){
            System.out.print(i);
        }
    }

在Kotlin中則需寫成這樣

fun output(vararg args: String) {
        for (i in args) {
            print(i)
        }
    }

可以看到它在參數名之前加了一個關鍵字 vararg

匿名函數

先看下面一段代碼

fun outPutSum(args: Array<String>) {
    val sumLambda: (Int, Int) -> Int = {x,y -> x+y}
    println(sumLambda(1,2))  // 輸出 3
}

它其實等同于Java中的這段代碼

interface ISum {

        int sum(int a,int b);

 }

public void outPutSum(){
      int sum = new ISum(){
         @Override
        public int sum(int a,int b) {
           return a+b;
        }
 }.sum(1,2);

        System.out.print(sum);
 }

很明顯簡潔了很多。如果對lambda語法不能快速理解,可以試著這樣想

val sumLambda: (Int, Int) -> Int = {x,y -> x+y}

這不就是我們之前說的定義不可變變量嗎?

val <標識符> : <類型> = <初始化值>

也就是說

  • (Int, Int) -> Int 整個就是sumlambda的類型??梢詴呵野阉斫鉃楹瘮殿愋?,即由函數返回的一個類型 。
  • {x,y -> x+y}則為sumlambda初始化值,實際上則是函數的具體實現。

一些特別的參數類型

前文中有提到,Java中無返回類型數據時,用關鍵字void,其包裝類為Void
而在Kotlin中則是使用Unit

  • 空數據類型 Unit
  • 任意數據類型 Any
  • 數組數據類型 Array

注釋

// 這是一個單行注釋

/* 這是一個多行的
   塊注釋。 */

與 Java 不同, Kotlin 中的塊注釋允許嵌套。

NULL檢查機制

  • !! 表示為空情況下拋出空異常

  • ? 表示變量可能為空

  • ?. 為空情況下返回null

  • ?. ?: 為空下處理

      //類型后面加?表示可為空
      var age: String? = "23" 
      //拋出空指針異常
      val ages = age!!.toInt()
      //不做處理返回 null
      val ages1 = age?.toInt()
      //age為空返回-1
      val ages2 = age?.toInt() ?: -1
    

當一個引用可能為 null 值時, 對應的類型聲明必須明確地標記為可為 null。

 fun getStringLength(obj:Any):Int?{
        if(obj is String){
            return obj.length;
        }
        return null;
    }

這個時候,把上面返回類型 Int后的?去掉,IDE是會變錯的。

類型檢測及自動類型轉換

使用關鍵字is ,類似于Java的 instanceof

  if(obj is String){
       return obj.length;// obj 是String類型
   }

if(obj  !is String){
    return null;// obj 不是String類型
}

甚至

  if (obj is String && obj.length > 0)
    return obj.length

區間

  • .. 或rangeTo 輔以 in 或 !in表示閉區間
  • until 排除區間的結束元素
  • step 關鍵字表示步長

下面是一些demo

fun testForRecycle(){

        for (i in 1..4){
            print(i)//輸出1,2,3,4
        }

        for (i in 4..1){
            print(i)//無輸出
        }

        for (i in 4 downTo 1){
            print(i)//輸出 4,3,2,1
        }

        for (i in 1.rangeTo(4)step 2){
            print(i)//輸出 1,3
        }

        for (i in 4 downTo 1 step 2){
            print(i)//輸出4 ,2
        }

        for (i in 1 until 4 ){
            print(i)//輸出 1,2,3
        }

        for (i in 1 until 10 step 2){
            print(i)//輸出 1,3,5,7,9
        }


}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,936評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,744評論 3 421
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,879評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,181評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,935評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,325評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,384評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,534評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,084評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,892評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,623評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,322評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,735評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,990評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,800評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,084評論 2 375

推薦閱讀更多精彩內容

  • 前言 人生苦多,快來 Kotlin ,快速學習Kotlin! 什么是Kotlin? Kotlin 是種靜態類型編程...
    任半生囂狂閱讀 26,248評論 9 118
  • 上篇介紹了Kotlin的特點以及其在Android Studio上的配置步驟,下面接著記錄一些Kotlin的基本語...
    ArsenicBing閱讀 629評論 0 2
  • 在學習Kotlin的過程中,我們會發現一些java中沒有的有趣特性,如表現性,安全性,擴展性,函數支持lambda...
    紅塵丶閱讀 591評論 0 1
  • Google在今年的IO大會上宣布,將Android開發的官方語言更換為Kotlin,作為跟著Google玩兒An...
    藍灰_q閱讀 76,972評論 31 489
  • 1.定義Package 在文件頂部申明Package,與java方式一致。 關鍵點:Kotlin的文件定義的包,并...
    SupLuo閱讀 637評論 0 47