Kotlin 基本語法

包聲明

package xxx.xxx.xx

如:

package com.talent.kotlin

引入類

與Java沒啥區(qū)別

import java.util.*

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

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

函數(shù)定義

一般函數(shù)

函數(shù)定義使用關(guān)鍵字 fun簇抵,參數(shù)格式為

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;
}

表達式作為函數(shù)體钻哩,返回類型自動推斷:

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")
 }

可變長參數(shù)函數(shù)

在Java中可變長參數(shù)一般這樣寫

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)
        }
    }

可以看到它在參數(shù)名之前加了一個關(guān)鍵字 vararg

匿名函數(shù)

先看下面一段代碼

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的類型傲霸〗澹可以暫且把它理解為函數(shù)類型,即由函數(shù)返回的一個類型 昙啄。
  • {x,y -> x+y}則為sumlambda初始化值穆役,實際上則是函數(shù)的具體實現(xiàn)。

一些特別的參數(shù)類型

前文中有提到梳凛,Java中無返回類型數(shù)據(jù)時耿币,用關(guān)鍵字void,其包裝類為Void
而在Kotlin中則是使用Unit

  • 空數(shù)據(jù)類型 Unit
  • 任意數(shù)據(jù)類型 Any
  • 數(shù)組數(shù)據(jù)類型 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 值時, 對應(yīng)的類型聲明必須明確地標記為可為 null淹接。

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

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

類型檢測及自動類型轉(zhuǎn)換

使用關(guān)鍵字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

區(qū)間

  • .. 或rangeTo 輔以 in 或 !in表示閉區(qū)間
  • until 排除區(qū)間的結(jié)束元素
  • step 關(guān)鍵字表示步長

下面是一些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
        }


}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子邓深,更是在濱河造成了極大的恐慌粤攒,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尖坤,死亡現(xiàn)場離奇詭異稳懒,居然都是意外死亡,警方通過查閱死者的電腦和手機慢味,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門场梆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纯路,你說我怎么就攤上這事或油。” “怎么了驰唬?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵顶岸,是天一觀的道長。 經(jīng)常有香客問我叫编,道長辖佣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任搓逾,我火速辦了婚禮卷谈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘霞篡。我一直安慰自己世蔗,他們只是感情好,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布朗兵。 她就那樣靜靜地躺著凸郑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矛市。 梳的紋絲不亂的頭發(fā)上芙沥,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音,去河邊找鬼而昨。 笑死救氯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的歌憨。 我是一名探鬼主播着憨,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼务嫡!你這毒婦竟也來了甲抖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤心铃,失蹤者是張志新(化名)和其女友劉穎准谚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體去扣,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡柱衔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了愉棱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唆铐。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奔滑,靈堂內(nèi)的尸體忽然破棺而出艾岂,到底是詐尸還是另有隱情,我是刑警寧澤朋其,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布澳盐,位于F島的核電站,受9級特大地震影響令宿,放射性物質(zhì)發(fā)生泄漏叼耙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一粒没、第九天 我趴在偏房一處隱蔽的房頂上張望筛婉。 院中可真熱鬧,春花似錦癞松、人聲如沸爽撒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硕勿。三九已至,卻和暖如春枫甲,著一層夾襖步出監(jiān)牢的瞬間源武,已是汗流浹背扼褪。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粱栖,地道東北人话浇。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像闹究,于是被迫代替她去往敵國和親幔崖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 前言 人生苦多渣淤,快來 Kotlin 赏寇,快速學習Kotlin! 什么是Kotlin价认? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,217評論 9 118
  • 上篇介紹了Kotlin的特點以及其在Android Studio上的配置步驟嗅定,下面接著記錄一些Kotlin的基本語...
    ArsenicBing閱讀 624評論 0 2
  • 在學習Kotlin的過程中,我們會發(fā)現(xiàn)一些java中沒有的有趣特性刻伊,如表現(xiàn)性,安全性椒功,擴展性捶箱,函數(shù)支持lambda...
    紅塵丶閱讀 583評論 0 1
  • Google在今年的IO大會上宣布,將Android開發(fā)的官方語言更換為Kotlin动漾,作為跟著Google玩兒An...
    藍灰_q閱讀 76,895評論 31 489
  • 1.定義Package 在文件頂部申明Package丁屎,與java方式一致。 關(guān)鍵點:Kotlin的文件定義的包旱眯,并...
    SupLuo閱讀 633評論 0 47