在本文中,您將了解函數(shù)。什么是函數(shù),其語(yǔ)法以及如何在Kotlin中創(chuàng)建用戶函數(shù)。
在編程中,函數(shù)是一組執(zhí)行特定任務(wù)的相關(guān)語(yǔ)句。
函數(shù)用于將大型程序分解為較小的模塊化塊。例如,您需要根據(jù)用戶的輸入來(lái)創(chuàng)建圓圈并為其著色。您可以創(chuàng)建兩個(gè)函數(shù)來(lái)解決此問(wèn)題:
createCircle() 函數(shù) - 用來(lái)創(chuàng)建圓圈
colorCircle() 函數(shù) - 用來(lái)填充顏色
將復(fù)雜的程序劃分為較小的組件,可以使我們的程序更有條理和更易于管理。
此外,它避免重復(fù)并使代碼可重用。
根據(jù)用戶定義的函數(shù)還是標(biāo)準(zhǔn)庫(kù)中的函數(shù),有兩種類(lèi)型的函數(shù):
Kotlin 標(biāo)準(zhǔn)庫(kù)函數(shù)
用戶定義的函數(shù)
標(biāo)準(zhǔn)庫(kù)函數(shù)是Kotlin中的內(nèi)置函數(shù),可以隨時(shí)使用。例如,
print() 是一個(gè)庫(kù)函數(shù),可將消息打印到標(biāo)準(zhǔn)輸出流(監(jiān)視器)。
sqrt() 返回?cái)?shù)字的平方根(Double值)
fun main(args: Array<String>) { var number = 5.5 print("Result = ${Math.sqrt(number)}") }
運(yùn)行該程序時(shí),輸出為:
Result = 2.345207879911715
這是Kotlin標(biāo)準(zhǔn)庫(kù)的鏈接,供您瀏覽。
如前所述,您可以自己創(chuàng)建函數(shù)。這些函數(shù)稱為用戶定義函數(shù)。
在使用(調(diào)用)函數(shù)之前,需要先對(duì)其進(jìn)行定義。
在Kotlin中定義函數(shù)的方法如下:
fun callMe() { //函數(shù)體 }
要在Kotlin中定義函數(shù),請(qǐng)使用 fun 關(guān)鍵字。然后是函數(shù)的名稱(標(biāo)識(shí)符)。在這里,函數(shù)的名稱為callMe。
在上面的程序中,括號(hào)( )為空。這意味著此函數(shù)不接受任何參數(shù)。您將在本文的后面部分了解參數(shù)。
花括號(hào)內(nèi)的代碼{ }是函數(shù)的主體。
您必須調(diào)用該函數(shù)才能在函數(shù)體內(nèi)運(yùn)行代碼。這是如何做:
callme()
該語(yǔ)句調(diào)用先前聲明的函數(shù)callMe()。
fun callMe() { println("從callMe()函數(shù)打印。") println("這很酷(還在從里面打印)。") } fun main(args: Array<String>) { callMe() println("從callMe()函數(shù)進(jìn)行外部打印。") }
運(yùn)行該程序時(shí),輸出為:
從callMe()函數(shù)打印。 這很酷(還在從里面打印)。 從callMe()函數(shù)進(jìn)行外部打印。
上面代碼中的 callMe() 函數(shù)不接受任何參數(shù)。
另外,該函數(shù)不返回任何值(返回類(lèi)型為Unit)。
讓我們來(lái)看另一個(gè)函數(shù)示例。該函數(shù)將接受參數(shù)并返回一個(gè)值。
fun addNumbers(n1: Double, n2: Double): Int { val sum = n1 + n2 val sumInteger = sum.toInt() return sumInteger } fun main(args: Array<String>) { val number1 = 12.2 val number2 = 3.4 val result: Int result = addNumbers(number1, number2) println("result = $result") }
運(yùn)行該程序時(shí),輸出為:
result = 15
在此,在函數(shù)調(diào)用期間將兩個(gè)Double類(lèi)型的參數(shù)number1和number2傳遞給addNumbers()函數(shù)。 這些參數(shù)稱為實(shí)際參數(shù)(實(shí)參)。
result = addNumbers(number1, number2)
參數(shù)n1和n2接受傳遞的參數(shù)(在函數(shù)定義中)。這些參數(shù)稱為形式參數(shù)(或形參)。
在Kotlin中,參數(shù)之間用逗號(hào)分隔。同樣,形式參數(shù)的類(lèi)型必須顯式鍵入。
注意,實(shí)際參數(shù)和形式參數(shù)的數(shù)據(jù)類(lèi)型應(yīng)該匹配,即,第一個(gè)實(shí)際參數(shù)的數(shù)據(jù)類(lèi)型應(yīng)該與第一個(gè)形式參數(shù)的類(lèi)型匹配。同樣,第二個(gè)實(shí)際參數(shù)的類(lèi)型必須與第二個(gè)形式參數(shù)的類(lèi)型相匹配,依此類(lèi)推。
這里,
return sumInteger
是return語(yǔ)句。此代碼終止addNumbers()函數(shù),程序控制跳至main()函數(shù)。
在程序中,sumInteger從addNumbers()函數(shù)返回。該值已分配給變量result。
注意,
sumInteger和result均為Int類(lèi)型。
函數(shù)的返回類(lèi)型在函數(shù)定義中指定。
//返回類(lèi)型為 Int fun addNumbers(n1: Double, n2: Double): Int { ... .. ... }
如果函數(shù)不返回任何值,則其返回類(lèi)型為Unit。 如果返回類(lèi)型為 Int,則可以在函數(shù)定義中指定返回類(lèi)型。
fun main(args: Array<String>) { println(getName("John", "Doe")) } fun getName(firstName: String, lastName: String): String = "$firstName $lastName"
運(yùn)行該程序時(shí),輸出為:
John Doe
在此,getName()函數(shù)接受兩個(gè)String參數(shù),并返回String。
如果函數(shù)返回單個(gè)表達(dá)式(如上例所示),則可以省略函數(shù)體的花括號(hào){},并在 = 符號(hào)之后指定主體。
在這種情況下,顯式聲明返回類(lèi)型是可選的,因?yàn)榉祷仡?lèi)型可以由編譯器推斷。 在以上示例中,您可以替換
fun getName(firstName: String, lastName: String): String = "$firstName $lastName"
等同于:
fun getName(firstName: String, lastName: String) = "$firstName $lastName"