在本文中,您將在示例的幫助下了解默認(rèn)參數(shù)和命名參數(shù)。
在Kotlin中,您可以為函數(shù)定義中的參數(shù)提供默認(rèn)值。
如果通過傳遞的參數(shù)調(diào)用該函數(shù),則將這些參數(shù)用作參數(shù)。但是,如果在不傳遞參數(shù)的情況下調(diào)用該函數(shù),則會使用默認(rèn)參數(shù)。
函數(shù)foo()有兩個參數(shù)。參數(shù)提供有默認(rèn)值。但是,foo()通過在上述程序中傳遞兩個參數(shù)來調(diào)用。因此,不使用默認(rèn)參數(shù)。
在foo()函數(shù)中,letter 和 number的值分別為'x' 和 2。
在這里,只有一個(第一個)參數(shù)傳遞給foo()函數(shù)。 因此,第一個參數(shù)使用傳遞給函數(shù)的值。 但是,第二個參數(shù) number 將采用默認(rèn)值,因?yàn)樵诤瘮?shù)調(diào)用期間未傳遞第二個參數(shù)。
在foo()函數(shù)中,letter和number的值分別為 'y' 和 15。
在這里,在不傳遞任何參數(shù)的情況下調(diào)用foo()函數(shù)。 因此,這兩個參數(shù)都使用其默認(rèn)值。
在foo()函數(shù)中,letter 和 number 的值分別為 'a' 和 15。
fun displayBorder(character: Char = '=', length: Int = 15) { for (i in 1..length) { print(character) } } fun main(args: Array<String>) { println("沒有傳遞參數(shù)時(shí)的輸出:") displayBorder() println("\n\n'*' 作為第一個參數(shù).") println("傳遞第一個參數(shù)時(shí)的輸出:") displayBorder('*') println("\n\n'*' 用作第一個參數(shù).") println("5用作第二個參數(shù).") println("同時(shí)傳遞兩個參數(shù)時(shí)的輸出:") displayBorder('*', 5) }
運(yùn)行該程序時(shí),輸出為:
沒有傳遞參數(shù)時(shí)的輸出: =============== '*' 作為第一個參數(shù). 傳遞第一個參數(shù)時(shí)的輸出: *************** '*' 作為第一個參數(shù). 5作為第二個參數(shù). 同時(shí)傳遞兩個參數(shù)時(shí)的輸出: *****
在討論命名參數(shù)之前,讓我們考慮對上面的代碼進(jìn)行一些修改:
fun displayBorder(character: Char = '=', length: Int = 15) { for (i in 1..length) { print(character) } } fun main(args: Array<String>) { displayBorder(5) }
在這里,我們嘗試將第二個參數(shù)傳遞給displayBorder()函數(shù),并對第一個參數(shù)使用默認(rèn)參數(shù)。但是,此代碼將給出一個使用錯誤。這是因?yàn)榫幾g器認(rèn)為我們試圖為字符(Char類型)提供5(Int值)。
為了解決這種情況,可以使用命名參數(shù)。方法如下:
fun displayBorder(character: Char = '=', length: Int = 15) { for (i in 1..length) { print(character) } } fun main(args: Array<String>) { displayBorder(length = 5) }
運(yùn)行該程序時(shí),輸出為:
=====
在上述程序中,我們使用命名實(shí)參(length = 5)來指定length函數(shù)定義中的參數(shù)應(yīng)采用此值(與實(shí)參的位置無關(guān))。
第一個參數(shù)字符使用程序中的默認(rèn)值 '='。