Kotlin學習筆記-控制語句

一辩棒、if語句

1、傳統(tǒng)寫法(同Java寫法一樣)

var numA = 2
if (numA == 2){
    println("numA == $numA => true")
}else{
    println("numA == $numA => false")
}

2嗤详、Kotlin 中的三元運算符

在Kotlin中其實是不存在三元運算符(condition ? then : else)這種操作的。
那是因為if語句的特性(if表達式會返回一個值)故而不需要三元運算符。

// 在Java中可以這么寫郎逃,但是Kotlin中直接會報錯。
// var numB: Int = (numA > 2) ? 3 : 5

// kotlin中直接用if..else替代挺份。例:
var numB: Int = if ( numA > 2 ) 3 else 5  // 當numA大于2時輸出numB的值為3褒翰,反之為5
println("numB = > $numB")

由上可以看出,Kotlin中的if可以作為一個表達式并返回一個值匀泊。

3优训、作為一個塊結(jié)構,并且最后一句表達式為塊的值

var numA: Int = 2
var numC: Int = if (numA > 2){
    numA++
    numA = 10
    println("numA > 2 => true")
    numA
}else if (numA == 2){
    numA++
    numA = 20
    println("numA == 2 => true")
    numA
}else{
    numA++
    numA = 30
    println("numA < 2 => true")
    numA
}

// 根據(jù)上面的代碼可以看出各聘,每一個if分支里面都是一個代碼塊揣非,并且返回了一個值。根據(jù)條件numC的值應該為20
println("numC => $numC")
//輸出結(jié)果
numA == 2 => true
numC => 20

二躲因、for循環(huán)

Kotlin廢除了Java中的for(初始值;條件早敬;增減步長)這個規(guī)則。但是Kotlin中對于for循環(huán)語句新增了其他的規(guī)則大脉,來滿足剛提到的規(guī)則搞监。
for循環(huán)提供迭代器用來遍歷任何東西
for循環(huán)數(shù)組被編譯為一個基于索引的循環(huán),它不會創(chuàng)建一個迭代器對象

1镰矿、新增的規(guī)則琐驴,去滿足for(初始值;條件;增減步長)這個規(guī)則

1.1、遞增

關鍵字:until
范圍:until[n,m) => 即大于等于n,小于m

 // 循環(huán)5次,且步長為1的遞增
  for (i in 0 until 5){
    print("i => $i \t")
  }

1.2棍矛、遞減

關鍵字:downTo
范圍:downTo[n,m] => 即小于等于n,大于等于m ,n > m

// 循環(huán)5次安疗,且步長為1的遞減
for (i in 15 downTo 11){
    print("i => $i \t")
}

1.3、符號(' .. ') 表示遞增的循環(huán)的另外一種操作

使用符號( '..').
范圍:..[n,m]=> 即大于等于n够委,小于等于m
和until的區(qū)別荐类,一是簡便性。二是范圍的不同茁帽。

print("使用 符號`..`的打印結(jié)果\n")
for (i in 20 .. 25){
    print("i => $i \t")
}

println()

print("使用until的打印結(jié)果\n")
for (i in 20 until 25){
    print("i => $i \t")
}
//輸出結(jié)構
使用 符號`..`的打印結(jié)果
i => 20     i => 21     i => 22     i => 23     i => 24     i => 25     
使用until的打印結(jié)果
i => 20     i => 21     i => 22     i => 23     i => 24 

1.4玉罐、設置步長

關鍵字:step

for (i in 10 until 16 step 2){
    print("i => $i \t")
}

2、迭代

for循環(huán)提供一個迭代器用來遍歷任何東西潘拨。
for循環(huán)數(shù)組被編譯為一個基于索引的循環(huán)吊输,它不會創(chuàng)建一個迭代器對象

2.1、遍歷字符串

for (i in "abcdefg"){
    print("i => $i \t")
}

2.2铁追、遍歷數(shù)組

var arrayListOne = arrayOf(10,20,30,40,50)
for (i in arrayListOne){
    print("i => $i \t")
}

2.3季蚂、使用數(shù)組的indices屬性遍歷

var arrayListTwo = arrayOf(1,3,5,7,9)
for (i in arrayListTwo.indices){
    println("arrayListTwo[$i] => " + arrayListTwo[i])
}

2.4、使用數(shù)組的withIndex()方法遍歷

var arrayListTwo = arrayOf(1,3,5,7,9)
for ((index,value) in arrayListTwo.withIndex()){
    println("index => $index \t value => $value")
}

2.5琅束、使用列表或數(shù)組的擴展函數(shù)遍歷

數(shù)組或列表有一個成員或擴展函數(shù)iterator()實現(xiàn)了Iterator<T>接口扭屁,且該接口提供了next()與hasNext()兩個成員或擴展函數(shù)
其一般和while循環(huán)一起使用

1.可以查看Array.kt這個類∩鳎可以看見其中的iterator()函數(shù)料滥,而這個函數(shù)實現(xiàn)了Iterator接口。

/**
   *   Creates an iterator for iterating over the elements of the array.
   */
 public operator fun iterator(): Iterator<T>

2.查看Iterator.kt這個接口類艾船,這個接口提供了hasNext()函數(shù)和next()函數(shù)葵腹。

public interface Iterator<out T> {

 /**
   * Returns the next element in the iteration.
   */
 public operator fun next(): T

 /**
   * Returns `true` if the iteration has more elements.
   */
 public operator fun hasNext(): Boolean
 }
var arrayListThree = arrayOf(2,'a',3,false,9)
var iterator: Iterator<Any> = arrayListThree.iterator()

while (iterator.hasNext()){
    println(iterator.next())
}

三、when語句

在Kotlin中已經(jīng)廢除掉了Java中的switch語句屿岂。而新增了when(exp){}語句践宴。
when語句不僅可以替代掉switch語句,而且比switch語句更加強大

3.1爷怀、when語句實現(xiàn)switch語句功能

when(5){
    1 -> {
        println("1")
    }
    2 -> println("2")
    3 -> println("3")
    5 -> {
        println("5")
    }
    else -> {
        println("0")
    }
}

3.2浴井、和逗號結(jié)合使用,相當于switch語句中的不使用break跳轉(zhuǎn)語句

when(1){
     // 即x = 1,2,3時都輸出1霉撵。
    1 , 2 , 3 -> {
        println("1")
    }
    5 -> {
        println("5")
    }
    else -> {
        println("0")
    }
}

3.3、條件可以使用任意表達式洪囤,不僅局限于常量

var num:Int = 5
when(num > 5){
    true -> {
        println("num > 5")
    }
    false ->{
        println("num < 5")
    }
    else -> {
        println("num = 5")
    }
}

3.4徒坡、 檢查值是否存在于集合或數(shù)組中

操作符:
(in) 在
(!in) 不在
限定:只適用于數(shù)值類型

var arrayList = arrayOf(1,2,3,4,5)
when(1){
    in arrayList.toIntArray() -> {
        println("1 存在于 arrayList數(shù)組中")
    }
    in 0 .. 10 -> println("1 屬于于 0~10 中")
    !in 5 .. 10 -> println("1 不屬于 5~10 中")
    else -> {
        println("都錯了 哈哈!")
    }
}

3.5瘤缩、檢查值是否為指定類型的值

操作符

  • 是(is)
  • 不是(!is)
    值得注意的是喇完,Kotlin的智能轉(zhuǎn)換可以訪問類型的方法和屬性
when("abc"){
    is String -> println("abc是一個字符串")
    else -> {
        println("abc不是一個字符串")
    }
}

// 智能轉(zhuǎn)換
var a: Int = 2
when(a){
    !is Int -> {
        println("$a 不是一個Int類型的值")
    }
    else -> {
        a = a.shl(2)
        println("a => $a")
    }
}

3.6、不使用表達式的when語句

表示為最簡單的布爾表達式

var array = arrayOfNulls<String>(3)
when{
     true -> {
         for (i in array){
             print(" $i \t")
         }
         println()
     }
     else -> {

     }
}
//輸出結(jié)果為:
 null    null    null 
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剥啤,一起剝皮案震驚了整個濱河市锦溪,隨后出現(xiàn)的幾起案子不脯,更是在濱河造成了極大的恐慌,老刑警劉巖刻诊,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件防楷,死亡現(xiàn)場離奇詭異,居然都是意外死亡则涯,警方通過查閱死者的電腦和手機复局,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粟判,“玉大人亿昏,你說我怎么就攤上這事〉到福” “怎么了角钩?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呻澜。 經(jīng)常有香客問我递礼,道長,這世上最難降的妖魔是什么易迹? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任宰衙,我火速辦了婚禮,結(jié)果婚禮上睹欲,老公的妹妹穿的比我還像新娘供炼。我一直安慰自己,他們只是感情好窘疮,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布袋哼。 她就那樣靜靜地躺著,像睡著了一般闸衫。 火紅的嫁衣襯著肌膚如雪涛贯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天蔚出,我揣著相機與錄音弟翘,去河邊找鬼。 笑死骄酗,一個胖子當著我的面吹牛稀余,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播趋翻,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼睛琳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起师骗,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤历等,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辟癌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寒屯,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年愿待,在試婚紗的時候發(fā)現(xiàn)自己被綠了浩螺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡仍侥,死狀恐怖要出,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情农渊,我是刑警寧澤患蹂,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站砸紊,受9級特大地震影響传于,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜醉顽,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一沼溜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧游添,春花似錦系草、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至廊酣,卻和暖如春能耻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背亡驰。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工晓猛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凡辱。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓鞍帝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親煞茫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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