Kotlin初探

来源:http://www.cnblogs.com/lovelycode/archive/2017/05/25/6902345.html
-Advertisement-
Play Games

前幾天看到新聞,Google將Kotlin語言作為Android應用開發的一級語言, 與Java並駕齊驅, 這則消息在開發界一下就炸開了鍋( 好像平息的很快。。。)! 連Google的親兒子go語言也沒有這種待遇。Kotlin是什麼鬼,感覺隱隱約約好像在哪裡見過啊,對IDEA新建工程時可以看到。 大 ...


    前幾天看到新聞,Google將Kotlin語言作為Android應用開發的一級語言, 與Java並駕齊驅, 這則消息在開發界一下就炸開了鍋( 好像平息的很快。。。)! 連Google的親兒子go語言也沒有這種待遇。Kotlin是什麼鬼,感覺隱隱約約好像在哪裡見過啊,對IDEA新建工程時可以看到。

大名鼎鼎的Java IDE IntelliJ提供商JetBrains開發的,而且是開源的。

      看到這裡我再也淡定不住了,決定去一探究竟,哥以前學Java可是同時打著J2EE和Android的主意,這下Java在Android平臺苗頭不太對,得去學習學習Kotlin才能安心。

官網的簡單介紹:Kotlin是針對現代對平臺應用的靜態類型編程語言,100%可以與java™和Android™互操作。Kotlin可以編譯成Java位元組碼在JVM上運行,在安卓設備上運行,也可以編譯成Javascript,在瀏覽器運行,這是要一統江湖的節奏嗎?

老規矩,Hello World!跑起來,使用IDEA2016就不用去搭建開發環境了,直接開搞了。

package com.newstart.kotlin

fun main(args: Array<String>) {
    print("Hello World!")
}

和Java區別還是有一點大的,mian方法是包級別的,Java是要在類里,參數聲明是:參數名:參數類型,簡潔了好多。

 

 

為什麼選擇 Kotlin?簡約、安全、互操作性、工具友好

  • 簡約

大大減少樣板代碼的數量,一行代碼搞定POJO包括getters,setter,equals(), hashCode(),toString() 和copy()等方法。(copy類似clone,但是比clone強大)

data class User(var name: String, var age: Int, var sex: String)

fun main(args: Array<String>) {
    var user = User("代碼如此多嬌", 27, "man")
    println(user.name)
    println(user.age)
    println(user.sex)
    println(user)
}

fun getUser(): User {
    return User("代碼如此多嬌", 27, "man")
}

是不是比Java代碼簡潔了好多?支持lambda表達式,過濾list中等於"l"的元素。

fun main(args: Array<String>) {
    var list1 = listOf("h", "e", "l", "l", "o")
    var list2 = list1.filter { it != "l" }
    println(list2)
}

lambda表達式Java8也有就沒有什麼對比啦!快速簡單的構建一個單例,這個就真的是簡單粗暴了。

object SingletonDemo {
    var username: String = "test"
    var pasword: String = "111"
}

使用object聲明單例類。

 

  • 安全

Kotlin對比於Java的一個最大的區別就是它致力於消除空引用所帶來的危險。NullPointerException(NPE)應該是開發中遇到的最多的一種運行時異常了。

fun test1(){
    var a: String = null//編譯錯誤,預設是不可為null的

    var b: String? = null //可以為空
    println(b.length) ////編譯錯誤
}

類型自動檢測

//如果你在代碼中已經判斷類型符合了
//Kotlin編譯器會自己進行類型轉換
fun test2(user: Any) {
    if (user is User)
        print(user.age)
}
  • 互操作性

使用跑在JVM上的任何現有庫,因為有 100% 的相容性,包括 SAM 支持,看到這個我就放心了。

package com.newstart.kotlin

import org.apache.commons.lang3.StringUtils

fun main(args: Array<String>) {
    //val聲明不可變變數
    val str: String = "a,b,c,d,e"
    val array = StringUtils.split(str, ",")
    for (s in array) {
        print(s)
    }
}

  • 工具友好

這個算不算JetBrains的一波強勢廣告?IDEA最好的Java IDE 沒有之一。

其他

  • 帶返回值的方法

fun getUser(): User {
    return User("代碼如此多嬌", 27, "man")
}
  • When

when (map["a"]) {
    '1' -> println("1")
    '2' -> println("2")
    is Char -> println("Char")
    !is String -> println("Not a string")
    else -> println("Unknown")
}
  • Map

val map = hashMapOf<String, Char>()
map.put("a", '1')
map.put("b", 'b')
for ((key, value) in map) {
    println("key = $key, value = $value")
}
  • 解構聲明,將類解構成變數

var user = User("代碼如此多嬌", 27, "man")
var (name, age, sex) = user
println("$name,$age,$sex")
  • 屬性委托-懶載入

class LazySample {
    val lazy: String by lazy {
        println("computed!")
        "my lazy"
    }
}
fun main(args: Array<String>) {
    val sample = LazySample()
    println("lazy = ${sample.lazy}")
    println("lazy = ${sample.lazy}")
}
輸出
computed! 
lazy = my lazy 
lazy = my lazy

屬性委托-觀察,Map屬性委托等等等等......

 

想要更深入的瞭解可以去他的官網https://try.kotlinlang.org,官網一系列可以線上編寫運行的demo和教程,如果你是Android開發者趕緊行動起來吧,Google支持的沒有錯。搞J2EE的就可以持觀望態度了,比如說我。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如下圖點擊Assers.xcassets,點擊下方的“+”,即可通過下麵方法增加launchimage 點擊launchimage,右邊出現方格 將圖片拖入方格中,Main Interface清空, Launch Images Source選擇Launchimage Launch Screen Fi ...
  • SoftReference可以用於bitmap緩存 WeakReference 可以用於handler ...
  • 支付寶插件 2016年11月的時候支付寶進行了一次更新,支付寶的SDK升級到2.0版本。以前在app中使用支付寶進行支付叫做移動支付,11月之後更名為APP支付。 1 根據支付寶的說明文檔的建議,為保證安全,簽名都放到後端去做,前端只需要接收後臺傳入簽名字元串,使用該插件調用支付寶SDK完成支付 2 ...
  • 最近想倒騰一個小小的 UIKit 到 JCenter,為開源社區貢獻一點綿薄之力,於是就有了一系列慘無人道的踩坑史。好,接下來,直奔主題,以下是發佈流程。 發佈到 JCenter 發佈到 JCenter 需要以下幾個步驟。 註冊 Bintray 賬號並創建倉庫 Bintray 是 JCenter 庫 ...
  • 本人初學Android,今天研究到Adapter這塊感覺挺有意思的,寫了個自定義列表進行測試 首先我們新建一個layout列表佈局文件,具體佈局可以自己設定。 下麵貼上我的自定義佈局文件代碼 上面代碼的效果圖如下,整體用的是一個Image,以及兩個TextView 不好看就先湊合吧,測試用 接下來我 ...
  • 電子書 Kotlin in Action.pdf 中文版,想深入瞭解Kotlin的都可以看一下 限個人學習使用,不得用於商業用途,請在下載後24小時內刪除。備註:資源來自網路,如有不合理可私信我,秒刪。電子書 Kotlin in Action.pdf 中文版 免費下載https://page55.c ...
  • 本書被Android開發者譽為Android學習經典。全書系統全面、循序漸進地介紹了Android軟體開發的知識、經驗和技巧。 第2版基於Android7.0對第1版進行了全面更新,將所有知識點都在新的Android系統上進行重新適配,使用全新的Android Studio開發工具代替之前的Ecli ...
  • 由柯元旦編著的《Android內核剖析》詳細分析了Android內核的內部機制,包括視窗管理系統、Activity管理系統、輸入法框架、編譯系統等,為Android內核定製及高級應用程式開發提供技術參考。 《Android內核剖析》適合於所有Android相關的工程師及產品經理,還可作為相關培訓機構 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...