一辩棒、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