• Kotlin初探


        前几天看到新闻,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的就可以持观望态度了,比如说我。

  • 相关阅读:
    笔记64 Spring Boot快速入门(四)
    笔记63 Spring Boot快速入门(三)
    笔记62 Spring Boot快速入门(二)
    笔记61 Spring Boot快速入门(一)
    笔记60 Spring+Mybatis整合
    笔记59 Spring+Hibernate整合(二)
    【转】单点登录原理与实现
    【转】大型网站架构演变和知识体系
    Eclipse下绿色安装插件Aptana、Swing
    zeromq源码分析笔记之准备(0)
  • 原文地址:https://www.cnblogs.com/lovelycode/p/6902345.html
Copyright © 2020-2023  润新知