Kotlin简介

166 阅读3分钟

背景

Kotlin是由JetBrains开发的针对JVM、Android和浏览器的静态编程语言,目前,在Apache组织的许可下已经开源。使用Kotlin,开发者可以很方便地开发移动Android应用、服务器程序和JS程序。Kotlin可以将代码编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。

Kotlin来源于一个岛屿的名字,全称是Kotlin Island,是英语【科特林岛】之意,这个小岛位于俄罗斯的圣彼得堡附近。之所以要命名为Kotlin,是因为Kotlin的主要开发工作就是由位于圣彼得堡分公司团队完成的。

大事年表

  • 2010年,JetBrains着手开发Kotlin项目。
  • 2011年7月,JetBrains发布Kotlin项目。
  • 2012年2月,JetBrains在Apache 2许可证下开源Kotlin项目源码。
  • 2016年2月,JetBrains发布第一个稳定版本Kotlin 1.0。
  • 2017年3月,Kotlin 1.1版本发布,正式支持JavaScript,增加新功能和特性。
  • 2017年5月,Google I/O大会上,Google宣布Kotlin为Andorid开发的首选语言。
  • 持续更新中...

HelloWorld

package ktshare

// 包级可见的方法
fun main(args: Array<String>) {
    // 结尾不需要 ;
    print("Hello World!")
}

特性

1.简洁

对比java代码量更少

2.安全

对变量进行静态空值检测

3.与java的互通性

可以与java相互调用,可以利用java,android,js现有库

详细讲解

1.简洁性

1.针对android控件使用的优化

java版本

public class LoginByJavaActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        EditText username = findViewById(R.id.username);
        Button login = findViewById(R.id.login);

        username.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
    }
}

kotlin版本

class loginByKTActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login_kt)

        username.afterTextChanged {  }
        login.setOnClickListener {  }
    }
}

更加简洁清晰的for循环

companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            testFor()
        }

        private fun testFor() {
            for(i in 0..4) {
                print(i)
                //结果 01234
            }

            for(i in 0 until 4) {
                print(i)
                //结果 0123
            }

            for(i in 0..4 step 2) {
                print(i)
                //结果 024
            }

            for(i in 4 downTo 0) {
                print(i)
                //结果 43210
            }

        }
    }

更简洁的数据类

java

kotlin

data class Person(val name: String, val age: Int)

更简洁的单例模式

java

kotlin

package ktshare

object SingletonByKT {
    fun method() {
        println("I am Singleton")
    }
}

更多样的集合工具方法

几乎涵盖了java stream流中的所有方法,并且还有新增的方法,甚至像操作集合那样操作数组

 var persons = arrayListOf(
                Person("赵", 18),
                Person("钱", 19),
                Person("孙", 20),
                Person("李", 21)
            )
 print(persons.find { it.age == 19 })

2.空安全

相对于java的变量声明,kotlin要更严格一些,对于一个变量默认情况下是不可以赋null的,如果强行赋空值,编译器则直接会报错阻止编译通过

image.png

如果一个变量确实需要空值情况则需要使用 ?. 或者 !!. 进行处理

var p: Person? = null

print(p?.age)
print(p!!.name)
print(p.age)

当使用 “?."时,代码如果遇到null则会返回 null 不会抛出异常,

但使用“!!."时,如果遇到null则会抛出NullException。

如果执行的语句有与变量有对应关系也可以使用let操作符进行关联简化操作

p?.let {
    println(it.name)
    println(it.age)
}

总结

针对当下Jvm的发展趋势以及java语言固有的繁琐,陈旧等弊病,尝试着拥抱一门新兴的Jvm语言或许也是一个不错的选择。 (待完善)