Kotlin教程之函數和包的定義和流程控制
包名的定義
在xxx.kt文件的頂部進行定義,使用package關鍵字,定義后,引用包內函數或類,使用包前綴:
1
2
3
|
package cn.jasonmarzw //包定義 fun doSomething(){} // 定義的函數 class User(){} //定義的類 |
1
2
3
4
|
在其他文件中使用時: 可以直接使用 cn.jasonmarzw.doSomething()和 cn.jasonmarzw.User進行調用。可以像Java一樣,使用 import 引入所需要的包。 也可以不定義包名,這樣就是默認包, default ,不需要報名修飾符就可以訪問。 這樣在項目文件組織結構上,可以考慮按不一樣的結構進行分類。 |
使用
1
2
3
|
使用 import 關鍵字導入所需要的類和函數: import cn.jasonmarzw.User 導入User類 import cn.jasonmarzw.doSomething 導入doSomething函數 |
可以使用as關鍵詞添加別名:
1
2
3
4
|
import cn.jasonmarzw.User as Person //添加User別名為Person import cn.jasonmarzw.doSomething as justDo //添加doSomething 函數別名為justDo var p = Person() //初始化User類對象 justDo() //實際調用doSomething函數 |
二、流程控制(Control Flow)
If判斷
功能包括以下幾類:
- 常規邏輯判斷: if(a>b) print(a) else print(b)
- 返回值:
if允許有返回值,返回值在最后的表達式,因此可以用作替代三元運算符?:
1
2
3
|
var valid = a>b? true : false var valid = if (a>b) true else false //上述表達式的替代寫法 println(valid) //輸出結果為true |
若if后是多個表達式,則返回值是最后一個表達式:
1
2
3
4
5
6
7
|
var valid= if (a>b){ println(a) a } else { println(b) b } |
valid的值是a或者b,若去掉a和b,觀察下valid的值:
1
2
|
var valid= if (a>b) println(a) else println(b) println(valid) |
輸出結果為:
1
|
kotlin.Unit |
kotlin.Unit為無類型,類似java中的void,可見無返回。
使用for循環
1
2
3
4
5
|
fun forLoop(array: Array<String>) { for (str in array) { println(str) } } |
or
1
2
3
4
5
|
fun forIndices(array: Array<String>) { for (i in array.indices) { println(array[i]) } } |
使用while循環
1
2
3
4
5
6
|
fun whileLoop(array: Array<String>) { var i = 0 while (i < array.size) { println(array[i++]) } } |
主要包括三種類型:
- Break
- continue
- return
1.break和continue
用法與java一致,用在循環中(for,while),還添加了一層特殊的用法,使用標識符@定義label,一般用在內層循環中跳到外層循環:
1
2
3
4
5
6
|
loop@ for (i in 0 .. 2 ){ for (j in 0 .. 3 ){ if (j== 2 ) continue @loop //跳到外層循環,繼續往下執行 } } |
將continue換成break,j值為2的時候,跳到label定義處,跳出該層循環:
1
2
3
4
5
6
|
loop@ for (i in 0 .. 2 ){ for (j in 0 .. 3 ){ if (j== 2 ) break @loop //跳到外層循環label處,跳出改層循環 } } |
2.return
在函數中使用return,當函數沒有返回值時,可以使用return或者return@label退出函數;當函數有返回值時,不可以使用label返回。
1
2
3
4
5
6
7
8
|
fun foo(){ var intArray = arrayOf( 1 , 2 , 3 ) intArray.forEach{ if (it== 2 ) return //遍歷到第二個元素時退出函數 println(it) } println( "end" ) } |
當使用label時,表示退出當前循環:
1
2
3
4
5
6
7
8
|
fun foo(){ var intArray = arrayOf( 1 , 2 , 3 ) intArray.forEach{ if (it== 2 ) return @forEach //遍歷到第二個元素時退出函數 println(it) } println( "end" ) } |
When表達式
when類型switch表達式,擁有多個分支,但是區別于switch,其具有的
常規邏輯判斷:
1
|
when(x){ 1 -> print(“is one”) else -> print(“not one”)} |
判斷x的表達式部分,可以是具體的值,可以是表達式,可以是取值范圍判斷。
表達式:
用作表達式時,有返回值 :
1
2
3
4
5
6
7
8
9
10
11
|
var a = 1 var x = when (a) { 3 -> { print(a) 3 //返回值 } else -> { print( "unit" ) 2 //返回值 } } |
查看When表達式定義:
1
|
"when" ( "(" expression ")" )? "{" whenEntry* "}" |
when條件部分定義為:(“(” expression “)”)?,是一個表達式,可忽略
whenEntry部分定義: whenCondition{“,”} “->” expression SEMI “else” “->” expression SEMI,whenCondition部分允許使用逗號分隔,支持多個condition組合,如:is String,is Boolean -> println(“cool”),->符號表示后面是內容部分,由表達式expression和SEMI組成,后面的else,當when當做表達式時,必須要有,否則返回值為Unit類型。
whenCondition定義::expression: (“in” | “!in”) expression : (“is” | “!is”) isRHS,可以直接是表達式,或者是in、!in修飾的表達式,或者 is、!is修飾的表達式。
使用集合
遍歷一個集合:
1
2
|
for (name in names) println(name) |
使用in操作符檢查一個集合是否包含一個對象:
1
2
|
if (text in names) // 調用names.contains(text) print(“Yes”) |
使用Lambda表達式過濾和映射集合:
1
2
3
4
5
|
names .filter { it.startsWith(“A”) } .sortedBy { it } .map { it.toUpperCase() } .forEach { print(it) } |
創建DTO(POJO/POCO)
1
|
data class Customer(val name: String, val email: String) |
提供帶有下列功能的Customer類:
-所有屬性的getter(和var的setter)
-equals()
-hashCode()
-toString()
-copy()
-component1(),component2()
try/catch表達式
1
2
3
4
5
6
7
8
|
fun test() { val result = try { count() } catch (e: ArithmeticException) { throw IllegalStateException(e) } // 和result一起工作 } |
本篇基本上對一些的基本語法進行了解釋,不多說慢慢學習吧。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
原文鏈接:http://blog.csdn.net/u013278099/article/details/50967659