宣告:fun
fun double(x: int): int
入口函式:mainfun main()
引數 name: type
函式引數使用 pascal 表示法定義,即 name: type。引數用逗號隔開。每個引數必須有顯式型別:
fun powerof(number: int, exponent: int)
預設引數 name: type=
fun read(b: array, off: int = 0, len: int = b.size)
預設值通過型別後面的=及給出的值來定義。
覆蓋方法,總是預設覆蓋原來預設引數,不能書寫預設引數。
函式呼叫
//呼叫函式預設引數情況,
fun foo(bar: int = 0, baz: int)
//位置引數呼叫:預設引數在前的情況1
foo(baz = 1) // 使用預設值 bar = 0
fun foo(bar: int = 0, baz: int = 1, qux: () -> unit)
//預設引數在前的情況2
foo(1) // 使用預設值 baz = 1
foo(qux = ) // 使用兩個預設值 bar = 0 與 baz = 1
//多引數,具名引數情況
fun reformat(str: string,
normalizecase: boolean = true,
uppercasefirstletter: boolean = true,
dividebycamelhumps: boolean = false,
wordseparator: char = ' ')
//預設呼叫
reformat(str, true, true, false, '_')
//增加可讀性可採用具名引數 呼叫
reformat(str,
normalizecase = true,
uppercasefirstletter = true,
dividebycamelhumps = false,
wordseparator = '_'
)//如果我們不需要所有的引數:可以巧妙的直接傳入需要更改的引數
reformat(str, wordseparator = '_')
//特殊情況,傳入需要更改的情況時候,所有位置引數放在具名引數之前
f(1, y = 2) √
f(x = 1, 2) ×
無意義返回值:unit
返回無意義型別 void,或者無返回值:
fun printsum(a: int, b: int): unit ")
}
基本:變數型別寫變數的後面,
fun sum(a: int, b: int): int
利用型別推斷,省略返回值型別書寫:
fun sum(a: int, b: int) = a + b
中綴函式,一種表示方法,忽略該呼叫的點與圓括號
例如:
infix fun int.shl(x: int): int
// 用中綴表示法呼叫該函式
1 shl 2
// 等同於這樣
1.shl(2)
infix呼叫的優先順序:
低於算術操作符、型別轉換以及rangeto
操作符
高於布林操作符&&
與||
、is-
與 `in-檢測以及其他的操作符
使用範圍支援成員函式,區域性函式
區域性函式,可以訪問閉包,上一層函式的區域性變數;
成員函式:可以直接通過例項、類.方法呼叫
sample().foo() // 建立類 sample 例項並呼叫 foo
使用條件:
要符合tailrec
修飾符的條件的話,函式必須將其自身呼叫作為它執行的最後乙個操作。在遞迴呼叫後有更多**時,不能使用尾遞迴,並且不能用在 try/catch/finally 塊中。
優點:允許一些通常用迴圈寫的演算法改用遞迴函式來寫,而無堆疊溢位的風險。
eg:
val eps = 1e-10 // "good enough", could be 10^-15
tailrec fun findfixpoint(x: double = 1.0): double
= if (math.abs(x - math.cos(x)) < eps) x else findfixpoint(math.cos(x))
相當於:
val eps = 1e-10 // "good enough", could be 10^-15
private fun findfixpoint(): double
}
Kotlin學習4 3 建構函式
在kotlin中,建構函式用 constructor 關鍵字進行修飾,乙個類可以有乙個主建構函式和多個次建構函式。主構函式位於類頭跟在類名之後,如果主建構函式沒有任何註解或可見性修飾符 如public constructor 關鍵字可省略。主構函式定義的語法格式如下 class 類名 constru...
學習Kotlin之內斂函式
在kotlin高階函式中,我們了解到lambda表示式實際上是會帶來額外的記憶體和效能開銷的。而內斂函式的作用就是將lambda表示式帶來的執行時開銷完全消除。只需要在定義高階函式時加上inline關鍵字即可。inline fun num1andnum2 num1 int,num2 int,oper...
Kotlin學習 Kotlin委託
委託模式是軟體設計模式中的一項基本技巧。在委託模式中,有兩個物件參與處理同乙個請求,接受請求的物件將請求委託給另乙個物件來處理。kotlin 直接支援委託模式,更加優雅,簡潔。kotlin 通過關鍵字 by 實現委託 類的委託即乙個類中定義的方法實際是呼叫另乙個類的物件的方法來實現的。以下例項中派生...