[技术分享]-是时候关注Kotlin了

编程界小小白一枚,平时刷刷知乎看看博客,偶发性遇见GitChat这个文:

https://mp.weixin.qq.com/s/K6NTWV9gth8Ge-eDvTzWfQ

于是,顺带科普了一下自己

先上Kotlin语言中文版文档:https://www.gitbook.com/book/hltj/kotlin-reference-chinese/details ]

Kotlin的来历
Kotlin的作者是大名鼎鼎的Jetbrains公司。它有一系列耳熟能详的产品,诸如Android Studio, IntelliJ IDEA, 还有前端的WebStorm, PhpStorm。
终于有一天,勤劳的IDEA工程师,在踩了那么多Java的天坑之后,奋起推出了Kotlin
2011年7月,JetBrains推出Kotlin项目。
2012年2月,JetBrains以Apache 2许可证开源此项目。
2016年2月15日,Kotlin v1.0(第一个官方稳定版本)发布。
2017 Google I/O 大会,Kotlin 转正。
亮点
阅读了一些文献后,个人感觉,Kotlin最大的亮点便是可以和Java无缝衔接(虽然它Jvm上的兄弟Groovy,Scala也能做到)。这也就意味着,我们不但拥有原来java中所有的资源,还能体验到js般丝滑的编程体验。

最喜欢的part~列举几个语法糖~~
类的简化,隐式getter()、setter()
接口的默认实现
lambda与高阶函数
空指针安全,编译时期的空指针检查
流式集合操作 map(), forEach()

1.类的定义

// java bean
class People{
    private String name;
    public People(String name){
        this.name = name;
    }
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return this.name;
    }
}
// kotlin bean
class People(val name: String){}

大大简化get() set() 有木有  终于节省生命了的感觉...  可以看到同样的数据实体,在kotlin中简化至1行。变量定义和构造函数合并,同时提供隐式的getter()、setter()。

2.继承

// 所有类默认final,要显式指定为open才可被继承
open class People(val name: String){}
// Code: People 表示继承关系
class Coder(name: String, val language: String = "Kotlin"): People(name){
    override fun toString(): String {
        return "name: $name, language: $language"
    }
}
// 可执行的main()方法
fun main(args: Array<String>) {
    val coder = Coder("Tom")
    println(coder)
}
// 输出: name: Tom, language: Kotlin
3.数据对象 dataClass

data class People(val name: String){}
在看Effective Java的时候,总是对如何正确重写hashCode(),equals(),clone()感到棘手。然而他们又是正确使用Collection的关键所在(无论是HashMap、ArrayList)。 Kotlin专门提供了一个data class,来自动生成hashCode(),equals(),clone()。

4.接口的默认实现

顾名思义,它便是指接口可以和抽象类一样,有方法体的默认实现。 我把它归结在语法糖里,是因为java8中早已有了一模一样的东西,对应的关键字叫default。看起来抽象类好像可以退休了,实则不然。接口依然只是接口,不能拥有属性,只是在方法定义上更加灵活了。

interface A {
    fun foo() { println("A") }    // 默认实现, 打印"A"
    fun bar()
}
interface B {
    fun foo() { println("B") }
    fun bar() { println("bar") }
}
// 多继承时,显式指定 super<A>.foo() 以去冲突
class D : A, B {
    override fun foo() {
        super<A>.foo()
        super<B>.foo()
    }
    override fun bar() {
        super.bar()
    }
}

5.lambda与高阶函数

// new 一个线程
// 匿名类写法
val runnable1 = object : Runnable{
    override fun run() {
        println("I'm an anonymous class")
    }
}
// 函数写法, 略像js
val runnable2 = fun (){
    println("I'm a function")
}
// lambda写法1
val runnable3 = Runnable { ->
    println("I'm a Lambda")
}
// lambda写法2
val runnable4 = { println("I'm a Lambda") }
Thread(runnable4).start()

6.空指针函数

你也许会想空指针不是很简单的东西吗,加个if(xxx != null)判断就好了。事实上,空指针绝对是出现频率最高,最讨厌的问题。而空安全则是kotlin主打的一个特性之一。在java8中,我们可以借助Optional勉强做到这一点。

var mNullable: String? = null
var mNonNull: String = "mNonNull"
fun testNull(){
    println("testNull: ")
    println(mNullable?.length)
    println(mNonNull.length)
    println()
}
// 输出:
testNull: 
null
8


// kotlin定义变量时区分两种类型:

// var mNullable: Any? = null 可空
// var mNonNull: Any = XXX 非空


//1.对一个 mNullable 你可以像普通的java类一样使用:
// java 风格,判空
if(mNullable != null)
    mNullable.length
// kotlin 语法糖,判空(推荐)
mNullable?.length


//2.对一个 mNonNull 则有严格的限制:
// 不必判空,因为必然非空
mNonNull.length
// 编译错误(试图给非空值赋予null)
mNonNull = null
// 编译错误(试图给非空值赋予可空值)
mNonNull = mNullable

7.流式操作 map(), forEach()

fun main(args: Array<String>){
    val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    list.filter { it%2==0 }             // 取偶数
            .map{ it*it }               // 平方
            .sortedDescending()         // 降序排序
            .take(3)                    // 取前 3 个
            .forEach { println(it) }    // 遍历, 打印
}
// 输出:
100
64
36
附上Kotlin maven配置
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib</artifactId>
            <version>${kotlin.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-test-junit</artifactId>
            <version>${kotlin.version}</version>
            <scope>test</scope>
        </dependency>

        <plugin>
                <artifactId>kotlin-maven-plugin</artifactId>
                <groupId>org.jetbrains.kotlin</groupId>
                <version>${kotlin.version}</version>
                <configuration/>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>process-sources</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile</id>
                        <phase>process-test-sources</phase>
                        <goals>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
嗯嗯~  Kotlin 慢慢学啦~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值