Kotlin:Google让我们使用Kotlin的理由

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/p106786860/article/details/75941693

在2017 Google I/O大会的主旨演讲中,宣布Kotlin语言将在Android上正式受到官方支持。相信开发人员,尤其是Andoid开发者都或多或少的听过Kotlin,它并不是横空出世的新东西。既然Google已经做支持了,那么我们也有理由深入学习一下。
那么Google有什么理由?Kotlin到底有什么优点?让我们使用Kotlinne ?下面来一起探讨一下。

一、非常适合Android开发,带来了现代语言优势,而不引入新的限制


1. 开源性:

  • Kotlin是一个开源项目,主要在Apache 2,并不属于某一个公司;

2. 兼容强:

  • Kotlin完全兼容JDK6,确保在老Android设备运行;
  • Android Studio 3.0以上和Android构建系统完全支持Kotlin相关工具;

3. 性能优:

  • 由于和Java非常相似字节码结果,Kotlin运行速度和相同的Java代码一样块;
  • 随着对Kotlin对内联函数支持,使用lambds编写代码通常比相同Java代码运行更快;

4. 互用好:

  • Kotlin100%支持和Java/C++(JNI)相互调用,允许使用已有的Android库,包含注解,数据绑定和Dagger等;

5. 占用小:

  • Kotlin运行时库非常紧凑,仅仅使得Debug.apk文件增加几百个方法,小于100K。Release.apk通过Proguard优化更小;

6. 编译快:

  • Kotlin支持高效的增量编译,大大减少了编译时间;

7. 学习易:

  • Kotlin插件提供了Java到Kotlin自动转换器;
  • Kotlin Koans提供了一系列包含语言关键功能的练习;

8. 新特性:

  • 语法简单:
    • 句子后不加分号;
    • DataClass自动生成getter/setter等;
    • 默认参数值减少方法重载等;
    • 使用var标识变量,val标识常量更加简洁;
    • 类型可推断,没有Java强制类型转换繁琐;等新特性;
  • 空指针安全:减少过多的检测空防御代码;
  • 方法扩展:可以自行扩展Framework的API;
  • Lambda、高阶函数、函数式编程:使得代码更简单灵活;
  • 字符串模板:更灵活的字符串拼接;

语法简单:

//变量和常量,类型推断:变量当前的版本号,类型Int可以根据值推断出来
var currentVersionCode = 1
//显式声明类型
var currentVersionName : String = "1.0"
//方法声明
fun main(args: Array<String>) {
    println(args)
}
//类和继承关系声明
class MainActivity : AppCompatActivity() {

}     
//DataClass自动生成getter,setting,hashcode和equals等方法
data class Book(var name: String, val price: Float, var author: String)
//支持默认参数值,减少方法重载
fun Context.showToast(message: String, duration:Int = Toast.LENGTH_LONG) {
    Toast.makeText(this, message, duration).show()
}    

空指针安全:

//空安全调用符号?,如果对象为null则不调用,不抛出空指针异常
fun testNullSafeOperator(string: String?){                  System.out.println(string?.toCharArray()?.getOrNull(10)?.hashCode())
}

扩展方法:

//向Context扩展longToast方法
fun Context.longToast(message: String) {
    Toast.makeText(this, message, Toast.LENGTH_LONG).show()
}
//通过applicationContext对象调用longToast方法
applicationContext.longToast("hello world")

Lambda,高阶函数,Stream API:

//使用Lambda设置按钮监听
findViewById(R.id.content).setOnClickListener {
    Log.d("MainActivity", "$it was clicked")
}
//使用高阶函数,传入函数作为参数(或者作为返回)
fun SharedPreferences.editor(f: (SharedPreferences.Editor) -> Unit) {
    val editor = edit()
    f(editor)
    editor.apply()
}
//Stream API调用方式,使得编程更加方便
Jsoup.parse(URL(url), PARSE_URL_TIMEOUT).getElementsByClass("table table-sm")
    .first().children() .filter { "tbody".equals(it.tagName().toLowerCase()) }
    .flatMap(Element::children).forEach {
        trElement ->ProxyItem().apply {
            trElement.children().forEachIndexed { index, element ->
                when (index) {
                    0 -> {
                        host = element.text().split(":")[0]
                        port = element.text().split(":")[1].toInt()
                    }
                    1 -> protocol = element.text()
                    5 -> country = element.text()
                }
            }
        }.let(::println)
    }     

字符串模板:

//在模板中灵活运用对象、变量等
val book = Book("Thinking In Java", 59.0f, "Unknown")
val extraValue = "extra"
Log.d("MainActivity", "book.name = ${book.name}; book.price=${book.price};extraValue=$extraValue")     

二、已经被许多大公司采用


国外的如Pinterest、Basecamp和Keepsage等公司已经成功的将它们的应用迁移到Kotlin,反馈在工作质量和速度方面有很大的提升,使得源码行数减少30%,方法数量减少10%。

三、提供了超越标准语言的工具


1. Kotlin Android Extensions:一个编译器扩展,允许你从代码去除findViewById()调用,使用合成编译器生成的属性替代;
2. Anko:一个围绕Android API提供更友好的Kotlin包装的库,还有一种SDL可以使用Kotlin代码替换xml布局;

好处Google已经说了这么多了,别犹豫了开始我们的Kotlin学习吧。


1.新技术,新未来!尽在1024工场。时刻关注最前沿技术资讯,发布最棒技术博文!(甭客气!尽情的扫描或者长按!)
1024工场服务号
2.加入“Kotlin开发”QQ讨论群,一起学习一起Hi。(甭客气!尽情的扫描或者长按!)
Kotlin开发群

猜你喜欢

转载自blog.csdn.net/p106786860/article/details/75941693