Kotlin教程之函數(shù)和包的定義和流程控制
Kotlin教程之函數(shù)和包的定義和流程控制
包名的定義
在xxx.kt文件的頂部進(jìn)行定義,使用package關(guān)鍵字,定義后,引用包內(nèi)函數(shù)或類,使用包前綴:
package cn.jasonmarzw //包定義
fun doSomething(){} // 定義的函數(shù)
class User(){} //定義的類
在其他文件中使用時(shí): 可以直接使用 cn.jasonmarzw.doSomething()和 cn.jasonmarzw.User進(jìn)行調(diào)用??梢韵馢ava一樣,使用import引入所需要的包。 也可以不定義包名,這樣就是默認(rèn)包,default,不需要報(bào)名修飾符就可以訪問。 這樣在項(xiàng)目文件組織結(jié)構(gòu)上,可以考慮按不一樣的結(jié)構(gòu)進(jìn)行分類。
使用
使用import關(guān)鍵字導(dǎo)入所需要的類和函數(shù): import cn.jasonmarzw.User 導(dǎo)入U(xiǎn)ser類 import cn.jasonmarzw.doSomething 導(dǎo)入doSomething函數(shù)
可以使用as關(guān)鍵詞添加別名:
import cn.jasonmarzw.User as Person //添加User別名為Person import cn.jasonmarzw.doSomething as justDo //添加doSomething 函數(shù)別名為justDo var p = Person() //初始化User類對象 justDo() //實(shí)際調(diào)用doSomething函數(shù)
二、流程控制(Control Flow)
If判斷
功能包括以下幾類:
- 常規(guī)邏輯判斷: if(a>b) print(a) else print(b)
- 返回值:
if允許有返回值,返回值在最后的表達(dá)式,因此可以用作替代三元運(yùn)算符?:
var valid = a>b?true:false var valid = if(a>b) true else false //上述表達(dá)式的替代寫法 println(valid) //輸出結(jié)果為true
若if后是多個(gè)表達(dá)式,則返回值是最后一個(gè)表達(dá)式:
var valid=if(a>b){
println(a)
a
}else{
println(b)
b
}
valid的值是a或者b,若去掉a和b,觀察下valid的值:
var valid=if(a>b) println(a) else println(b) println(valid)
輸出結(jié)果為:
kotlin.Unit
kotlin.Unit為無類型,類似java中的void,可見無返回。
使用for循環(huán)
fun forLoop(array: Array<String>) {
for (str in array) {
println(str)
}
}
or
fun forIndices(array: Array<String>) {
for (i in array.indices) {
println(array[i])
}
}
使用while循環(huán)
fun whileLoop(array: Array<String>) {
var i = 0
while (i < array.size) {
println(array[i++])
}
}
主要包括三種類型:
- Break
- continue
- return
1.break和continue
用法與java一致,用在循環(huán)中(for,while),還添加了一層特殊的用法,使用標(biāo)識符@定義label,一般用在內(nèi)層循環(huán)中跳到外層循環(huán):
loop@ for(i in 0..2){
for(j in 0..3){
if(j==2)
continue@loop//跳到外層循環(huán),繼續(xù)往下執(zhí)行
}
}
將continue換成break,j值為2的時(shí)候,跳到label定義處,跳出該層循環(huán):
loop@ for(i in 0..2){
for(j in 0..3){
if(j==2)
break@loop//跳到外層循環(huán)label處,跳出改層循環(huán)
}
}
2.return
在函數(shù)中使用return,當(dāng)函數(shù)沒有返回值時(shí),可以使用return或者return@label退出函數(shù);當(dāng)函數(shù)有返回值時(shí),不可以使用label返回。
fun foo(){
var intArray = arrayOf(1,2,3)
intArray.forEach{
if(it==2)return //遍歷到第二個(gè)元素時(shí)退出函數(shù)
println(it)
}
println("end")
}
當(dāng)使用label時(shí),表示退出當(dāng)前循環(huán):
fun foo(){
var intArray = arrayOf(1,2,3)
intArray.forEach{
if(it==2)return@forEach //遍歷到第二個(gè)元素時(shí)退出函數(shù)
println(it)
}
println("end")
}
When表達(dá)式
when類型switch表達(dá)式,擁有多個(gè)分支,但是區(qū)別于switch,其具有的
常規(guī)邏輯判斷:
when(x){ 1 -> print(“is one”) else -> print(“not one”)}
判斷x的表達(dá)式部分,可以是具體的值,可以是表達(dá)式,可以是取值范圍判斷。
表達(dá)式:
用作表達(dá)式時(shí),有返回值 :
var a = 1
var x = when (a) {
3 -> {
print(a)
3 //返回值
}
else -> {
print("unit")
2 //返回值
}
}
查看When表達(dá)式定義:
"when" ("(" expression ")")? "{"whenEntry*"}"
when條件部分定義為:(“(” expression “)”)?,是一個(gè)表達(dá)式,可忽略
whenEntry部分定義: whenCondition{“,”} “->” expression SEMI “else” “->” expression SEMI,whenCondition部分允許使用逗號分隔,支持多個(gè)condition組合,如:is String,is Boolean -> println(“cool”),->符號表示后面是內(nèi)容部分,由表達(dá)式expression和SEMI組成,后面的else,當(dāng)when當(dāng)做表達(dá)式時(shí),必須要有,否則返回值為Unit類型。
whenCondition定義::expression: (“in” | “!in”) expression : (“is” | “!is”) isRHS,可以直接是表達(dá)式,或者是in、!in修飾的表達(dá)式,或者 is、!is修飾的表達(dá)式。
使用集合
遍歷一個(gè)集合:
for (name in names) println(name)
使用in操作符檢查一個(gè)集合是否包含一個(gè)對象:
if (text in names) // 調(diào)用names.contains(text) print(“Yes”)
使用Lambda表達(dá)式過濾和映射集合:
names
.filter { it.startsWith(“A”) }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { print(it) }
創(chuàng)建DTO(POJO/POCO)
data class Customer(val name: String, val email: String)
提供帶有下列功能的Customer類:
-所有屬性的getter(和var的setter)
-equals()
-hashCode()
-toString()
-copy()
-component1(),component2()
try/catch表達(dá)式
fun test() {
val result = try {
count()
} catch (e: ArithmeticException) {
throw IllegalStateException(e)
}
// 和result一起工作
}
本篇基本上對一些的基本語法進(jìn)行了解釋,不多說慢慢學(xué)習(xí)吧。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Java?HashMap中除了死循環(huán)之外的那些問題
這篇文章主要介紹了Java?HashMap中除了死循環(huán)之外的那些問題,這些問題大致可以分為兩類,程序問題和業(yè)務(wù)問題,下面文章我們一個(gè)一個(gè)來看,需要的小伙伴可以參考一下2022-05-05
在Spring Boot中使用swagger-bootstrap-ui的方法
這篇文章主要介紹了在Spring Boot中使用swagger-bootstrap-ui的方法,需要的朋友可以參考下2018-01-01
Java WebService 簡單實(shí)例(附實(shí)例代碼)
本篇文章主要介紹了Java WebService 簡單實(shí)例(附實(shí)例代碼), Web Service 是一種新的web應(yīng)用程序分支,他們是自包含、自描述、模塊化的應(yīng)用,可以發(fā)布、定位、通過web調(diào)用。有興趣的可以了解一下2017-01-01
Java中數(shù)組與集合的相互轉(zhuǎn)換實(shí)現(xiàn)解析
這篇文章主要介紹了Java中數(shù)組與集合的相互轉(zhuǎn)換實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08

