Kotlin研發(fā)第一彈——基本語法

基本語法

  • 基本語法

    • 包定義

    • 定義函數(shù)

    • 定義局部變量

    • 注釋

    • 使用字符串模板

    • 使用條件表達式

    • 使用可空變量以及空值檢查

    • 使用值檢查以及自動轉(zhuǎn)換

    • 使用for循環(huán)

    • 使用while循環(huán)

    • 使用when表達式

    • 使用ranges

    • 使用集合

基本語法

包定義

在源文件的開頭定義包


package com.wyc.accountschool.kotlin.test.zheshi.zhende

import com.wyc.accountschool.kotlin.test.JavaTest

包名不必和文件夾路徑一致:源文件可以放在任意位置.

定義函數(shù)

定義一個函數(shù)接收兩個int型參數(shù)俊马,返回值int:


fun sum(a:Int,b:Int):Int{

    return a+b

}

只有一個表達式作為函數(shù)體牧牢,以及自推導型的返回值:


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

kotlin默認返回一個Unit的值,這個相當于java中Object是所有類的父類辐马,不含有任何值


fun printSum(a:Int,b:Int):Unit{

    println("a = $a,b= $b")

}

Unit返回類型可以不帶


fun printSum(a:Int,b:Int){

    println("a=$a,b=$b")

}

定義局部變量

一次賦值(只讀)的局部變量


//定義局部變量

fun getDeTest(){

    val a:Int=1//立刻賦值

    val b=2//自推導類型

    val c:Int//沒有初始化需要指定類型

    c=3//推導賦值型

}

可修改的變量:

var x=5

x+=1

注釋

與java和JavaScript一樣,kotlin支持單行注釋和塊注釋。


// 單行注釋

/*  哈哈哈哈

    這是塊注釋 */

與java不同的是kotlin的塊注釋能夠級聯(lián)

塊標簽

KDoc 目前支持以下塊標簽(block tags):

@param <名稱>

用于函數(shù)的值參數(shù)或者類、屬性或函數(shù)的類型參數(shù)凡蜻。 為了更好地將參數(shù)名稱與描述分開,如果你愿意垢箕,可以將參數(shù)的名稱括在方括號中划栓。因此,以下兩種語法是等效的:


@param name 描述条获。

@param[name] 描述忠荞。

@return

用于函數(shù)的返回值。

@constructor

用于類的主構(gòu)造函數(shù)。

@receiver

用于擴展函數(shù)的接收者钻洒。

@property <名稱>

用于類中具有指定名稱的屬性奋姿。這個標簽可用于在主構(gòu)造函數(shù)中聲明的屬性,當然直接在屬性定義的前面放置 doc 注釋會很別扭素标。

@throws <類>, @exception <類>

用于方法可能拋出的異常称诗。因為 Kotlin 沒有受檢異常,所以也沒有期望所有可能的異常都寫文檔头遭,但是當它會為類的用戶提供有用的信息時寓免, 仍然可以使用這個標簽。

@sample <標識符>

將具有指定限定的名稱的函數(shù)的主體嵌入到當前元素的文檔中计维, 以顯示如何使用該元素的示例袜香。

@see <標識符>

將到指定類或方法的鏈接添加到文檔的另請參見塊。

@author

指定要編寫文檔的元素的作者鲫惶。

@since

指定要編寫文檔的元素引入時的軟件版本蜈首。

@suppress

從生成的文檔中排除元素∏纺福可用于不是模塊的官方 API 的一部分但還是必須在對外可見的元素欢策。

使用字符串模板


val name="wyc"

val myName="my name is $name"

val myCompany="${myName.replace(name,"da")}, is a big company"

使用表達式


//使用表達式

fun maxOf(a:Int,b:Int):Int{

        return if(a>b)

            a

        else

            b

    }

fun maxOf1(a:Int,b:Int)=if (a>b) a else b

使用可空變量以及空值檢查

當空值可能出現(xiàn)時應該明確指出該引用可空

當str中不包含整數(shù)時返回空:


//返回空值

    fun praseInt(s:String):Int?{

        return s.toIntOrNull()

    }

    fun testPraseInt(s1:String,s2:String){

        val a=praseInt(s1)

        val b=praseInt(s2)

        if (a!=null&&b!=null)

            println(a*b)

        else

            println("either a is $a or b is $b")

    }

使用值檢查以及自動轉(zhuǎn)換

使用is操作符檢查一個表達式是否是某個類型的實例,如果對不可變的局部變量或?qū)傩赃M行過了類型檢查赏淌,就沒必要明確轉(zhuǎn)換

fun getStringLength(o:Any):Int?{

        return if (o is String) o.length else null

    }

使用for循環(huán)


//使用for

    val nameList= listOf("wyc","lyb","zyf")

    for (name in nameList){

        println("name is $name")

    }

    //或者是這樣

    for (num in nameList.indices){

        println("my name at position in $num is ${nameList[num]}")

    }

使用when表達式


//when表達式

    fun gescribeTest(obj:Any)=when(obj){

        is String->"its String"

        is Int->"its Int"

        else ->"its no"

    }

使用ranges

使用in操作符檢查數(shù)值是否在某個范圍內(nèi):

使用 in 操作符檢查數(shù)值是否在某個范圍內(nèi):


val x = 10

val y = 9

if (x in 1..y+1) {

    println("fits in range")

}

檢查數(shù)值是否在范圍外:

val list = listOf("a", "b", "c")

if (-1 !in 0..list.lastIndex) {

    println("-1 is out of range")

}

if (list.size !in list.indices) {

    println("list size is out of valid list indices range too")

}

使用范圍內(nèi)迭代:


for(x in 1..5){

    println(x)

}

使用步進


for(x in 1..2 step 2){

    println(x)

}

for(x in 9 downTo 0 step 3){

    println(x)

}

使用集合

對一個集合盡心迭代


  fun printList(namelist:List<String>)=nameList.forEach{

        when(it){

            in "wyc" -> println("name is $it")

            in "lyb"-> println("name is $it")

            in "zyf"->println("name is $it")

        }

    }

使用 in 操作符檢查集合中是否包含某個對象


  fun printList1(list: List<String>) =when{

        "wyc" in list->println("printList name is wyc")

        else -> {

            println("printList name is nobody")

        }

    }

使用lambda表達式


//使用lambda表達式

    nums.filter { it.startsWith("w") }

            .sortedBy { it.length }

            .map { it.toUpperCase() }

            .forEach {

                println(it)

            }

跳轉(zhuǎn)下一章 Kotlin研發(fā)第二彈——習慣用語

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末踩寇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子六水,更是在濱河造成了極大的恐慌俺孙,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掷贾,死亡現(xiàn)場離奇詭異睛榄,居然都是意外死亡,警方通過查閱死者的電腦和手機胯盯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門懈费,熙熙樓的掌柜王于貴愁眉苦臉地迎上來计露,“玉大人博脑,你說我怎么就攤上這事∑惫蓿” “怎么了叉趣?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長该押。 經(jīng)常有香客問我疗杉,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任烟具,我火速辦了婚禮梢什,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘朝聋。我一直安慰自己嗡午,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布冀痕。 她就那樣靜靜地躺著荔睹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪言蛇。 梳的紋絲不亂的頭發(fā)上僻他,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音腊尚,去河邊找鬼吨拗。 笑死,一個胖子當著我的面吹牛婿斥,可吹牛的內(nèi)容都是我干的丢胚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼受扳,長吁一口氣:“原來是場噩夢啊……” “哼携龟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勘高,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤峡蟋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后华望,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蕊蝗,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年赖舟,在試婚紗的時候發(fā)現(xiàn)自己被綠了蓬戚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡宾抓,死狀恐怖子漩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情石洗,我是刑警寧澤幢泼,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站讲衫,受9級特大地震影響缕棵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一招驴、第九天 我趴在偏房一處隱蔽的房頂上張望篙程。 院中可真熱鬧,春花似錦别厘、人聲如沸房午。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽郭厌。三九已至,卻和暖如春雕蔽,著一層夾襖步出監(jiān)牢的瞬間折柠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工批狐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扇售,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓嚣艇,卻偏偏與公主長得像承冰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子食零,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

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