Kotlin:Google让我们使用Kotlin的理由
2017-07-23 18:06
232 查看
在2017 Google I/O大会的主旨演讲中,宣布Kotlin语言将在Android上正式受到官方支持。相信开发人员,尤其是Andoid开发者都或多或少的听过Kotlin,它并不是横空出世的新东西。既然Google已经做支持了,那么我们也有理由深入学习一下。
那么Google有什么理由?Kotlin到底有什么优点?让我们使用Kotlinne ?下面来一起探讨一下。
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、高阶函数、函数式编程:使得代码更简单灵活;
字符串模板:更灵活的字符串拼接;
语法简单:
空指针安全:
扩展方法:
Lambda,高阶函数,Stream API:
字符串模板:
2. Anko:一个围绕Android API提供更友好的Kotlin包装的库,还有一种SDL可以使用Kotlin代码替换xml布局;
好处Google已经说了这么多了,别犹豫了开始我们的Kotlin学习吧。
1.新技术,新未来!尽在1024工场。时刻关注最前沿技术资讯,发布最棒技术博文!(甭客气!尽情的扫描或者长按!)
2.加入“Kotlin开发”QQ讨论群,一起学习一起Hi。(甭客气!尽情的扫描或者长按!)
那么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工场。时刻关注最前沿技术资讯,发布最棒技术博文!(甭客气!尽情的扫描或者长按!)
2.加入“Kotlin开发”QQ讨论群,一起学习一起Hi。(甭客气!尽情的扫描或者长按!)
相关文章推荐
- 使用baidu的最后一个理由即将消失:原创Google词典脚本
- 使用Google-FireFox比较IE浏览器好的理由
- 使用Google-FireFox比较IE浏览器好的理由
- Google说,我们不使用C++异常
- Kotlin 踩坑日记(四) Maven Google 仓库 gradle 使用
- Spring Boot 与 Kotlin 使用MongoDB数据库
- 使用较低版本API的Intel镜像模拟器支持Google API
- Google Protobuf 使用介绍
- GOOGLE使用
- flex下使用google api获取对应经纬度的地名
- CentOS 7 使用Google-Authenticator进行多因素认证
- 【云快讯】之四十五《Google在云服务领域认输?不,我们的重点是大数据》
- Google Map API使用中出现的“google未定义”解决办法
- Google官方网页载入速度检测工具PageSpeed Insights 使用教程
- 如果给JS代码发布正式使用前增加一个编译步骤,我们能做些什么.
- 为什么要关闭360云盘:新来的美工嫌我们logo太丑,所以就决定关闭了。这个理由怎么样
- 一招教你使用Google的所有服务,绝对靠谱
- 造成ORA-01843 无效的月份 的一些原因 1) 当我们在一个中文环境的客户端使用如下sql语句 INSERT INTO "temptable" ( DELIVER_DATE ) VALUES
- 使用rem单位的问题——Google下字体很大
- IE8 IE9 Chrome 默认使用https搜索google