您好,登錄后才能下訂單哦!
Kotlin是什么意思,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
一、Kotlin是什么
Kotlin 是一個用于現代多平臺應用的靜態編程語言,由 JetBrains 開發。Kotlin可以編譯成Java字節碼,也可以編譯成JavaScript,方便在沒有JVM的設備上運行。Kotlin已正式成為Android官方支持開發語言。
二、Kotlin的就應用領域
學完kotlin能成為全棧工程師。
不僅能編寫web前端,web后端,Android移動端,還可以編寫server腳本,桌面游戲。
三、Kotlin的特點
靜態強類型性語言
運行在JVM上
可編譯成JavaScript代碼
與Java100%兼容
四、Kotlin的發展趨勢
2011年進行開源,2017年在github上star數量已經達到17k。目前 花瓣、豆瓣 APP 以及 JetBrains 全線編輯器都在使用 Kotlin,國內很多初創公司也都
在使用 Kotlin(尤其是應用于 Android 開發)
五、Kotlin的優勢
全面支持Lambda表達式
數據類(Data classes)
函數字面量和內聯函數(Function literals & inline functions)
函數擴展(Extension functions)
空安全(Null safety)
智能轉換(Smart casts)
字符串模版(String templates)
主構造函數(Primary constructors)
類委托(Class delegation)
類型推斷(Type inference)
單例(Singletons)
聲明點變量(Declaration-site variance)
區間表達式(Range expressions)
六、Kotlin中的函數
內聯函數
Android開發中,打印信息一般我們會用到Log類,Log中每個方法我們都要傳兩個參數,第一個tag參數在Kotlin中我們可以像下面封裝一下,這樣就只需要傳一個參數。
inline fun <reified T> T.debug(log:Any)
{
Log.d(T::class.simpleName, log.toString())
}
它可以通過泛型參數 T 來獲取到T的具體類型,并且拿到它的類名——當然,如果你愿意,你甚至可以調用它的構造方法來構造一個對象出來——為什么 Kotlin 可以做到呢?因為這段代碼是 inline 的,最終編譯時是要編譯到調用它的代碼塊中,這時候T的類型實際上是確定的,因而 Kotlin 通過 reified 這個關鍵字告訴編譯器,T 這個參數可不只是個擺設,我要把它當實際類型來用。
在高階函數前增加inline注解可以指定函數內聯,inline 標記即影響函數本身也影響傳遞進來的 lambda 函數:所有的這些都將被關聯到調用點。內聯可能會引起生成代碼增長,但我們可以合理的解決它(不要內聯太大的函數)。也可以使用noinline來指定某些函數不進行內聯。
inline fun foo(inlined: () -> Uint, @noinline notInlined: () -> Unit) {
//...
}
可以內聯的 lambda 表達式只能在內聯函數內部調用或者作為可內聯的參數傳遞, 但是 noinline 的可以以任何我們喜歡的方式操作:存儲在字段中、傳送它等等。
單表達式函數
如果一個函數的函數體只有一個表達式,函數體可以直接寫在 “=”之后,也就是這樣:
fun double(x: Int): Int = x * 2
fun eval(expr: Expr): Double = when(expr) {
is Expr.Const -> expr.number
is Expr.Sum -> eval(expr.e1) + eval(expr.e2)
Expr.NotANumber -> Double.NaN
// the `else` clause is not required because we've covered all the cases
}
這里使用了when關鍵字,類似于java中的switch,但比之更強大。
匿名函數
/**
* 匿名函數,沒有名字,其他語法和常規函數類似
*
* 聲明一個匿名函數,這里用表達式來表示函數體,也就是單表達式函數
*/
var test3= fun(x:Int,y:Int):Int=x+y
/**
* 聲明一個匿名函數,這里用代碼塊來表示函數體
*/
var test4= fun(x:Int,y:Int):Int {
return x+y
}
/**
* 聲明一個匿名函數,當返回值類型可以推斷出,可以省略
*/
var test5= fun(x:Int,y:Int)=x+y
fun main(args: Array<String>) {
println(test3(1,2))
println(test4(1,2))
println(test5(1,2))
}
高階函數與lambda表達式
高階函數就是可以接受函數作為參數或返回一個函數的函數。比如 lock() 就是一個很好的例子
fun lock<T>(lock: Lock, body: () -> T ) : T {
lock.lock()
try {
return body()
}
finally {
lock.unlock()
}
}
關于Kotlin是什么意思問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。