這篇文章將為大家詳細講解有關kotlin頂層函數和函數表達式怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
不同于Java中函數只能定義在每個類里面,Kotlin采用了JavaScript 中的做法,可以在文件任意位置處定義函數,這種函數稱為頂層函數
編譯后頂層函數會成為文件類下的靜態函數,比如在文件名是join.kt下定義的joinToString函數可以通過JoinKt.joinToSting調用,其中JoinKt是編譯后的類名。
// 編譯成靜態函數// 文件名 join.ktpackage stringsfun joinToString() : String {...}/* Java */import strings.JoinKt;JoinKt.joinToSting(....)
看下上面函數編譯后的效果:// 編譯成class文件后反編譯結果
// 編譯成class文件后反編譯結果@NotNullpublic static final String joinToString(@NotNull Collection collection, @NotNull String separator, @NotNull String prefix, @NotNull String postfix) { Intrinsics.checkParameterIsNotNull(collection, "collection"); Intrinsics.checkParameterIsNotNull(separator, "separator"); Intrinsics.checkParameterIsNotNull(prefix, "prefix"); Intrinsics.checkParameterIsNotNull(postfix, "postfix"); StringBuilder sb = new StringBuilder(prefix); int index = 0; for(Iterator var7 = ((Iterable)collection).iterator(); var7.hasNext(); ++index) { Object element = var7.next(); if (index > 0) {sb.append(separator); } sb.append(element); } sb.append(postfix); String var10000 = sb.toString(); Intrinsics.checkExpressionValueIsNotNull(var10000, "sb.toString()"); return var10000; }// 默認函數值public static String joinToString$default(Collection var0, String var1, String var2, String var3, int var4, Object var5) { if ((var4 & 2) != 0) { var1 = " "; } if ((var4 & 4) != 0) { var2 = "["; } if ((var4 & 8) != 0) { var3 = "]"; } return joinToString(var0, var1, var2, var3);
接下來看下Kotlin中很重要的一個特性,擴展函數。
擴展函數是類的一個成員函數,不過定義在類的外面
擴展函數不能訪問私有的或者受保護的成員
擴展函數也是編譯成靜態函數
通過下面這個簡單的例子看下函數聲明相關的概念,函數聲明的關鍵字是fun,嗯,比JS的function還簡單。
Kotlin中參數類型是放在變量:后面,函數返回類型也是。
fun max(a: Int, b: Int) : Int {if (a > b) {return a } else {return b}}
當然, Kotlin是有類型推導功能,如果可以根據函數表達式推導出類型,也可以不寫返回類型。
但是上面的還是有點繁瑣,還能再簡單,在 Kotlin中if是表達式,也就是有返回值的,因此可以直接return,另外判斷式中只有一行一句也可以省略掉大括號:
fun max(a: Int, b: Int) {return if (a > b) a else b}
還能在簡單點嗎?可以,if是表達式,那么就可以通過表達式函數體返回:
fun max(a: Int, b: Int) = if(a > b) a else b
最終只需要一行代碼。
關于“kotlin頂層函數和函數表達式怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。