JVM 上主流编程语言历史时间轴概览
Kotlin也是基于JVM设计的编程语言,算是对Java的温和改良,她是一个开源项目的成果,拥有很高的声望,很多公司、组织、业界大犇都很喜欢她,Square公司的Jake大神(Dagger、ButterKnife、Retrofit、OkHttp...之父)就专门写了篇Using Project Kotlin for Android为Kotlin站台
相对Java来说,Kotlin在编写代码时有如下优势:代码简洁高效、函数式编程、空指针安全、支持lambda表达式、流式API等
在执行效率上,Kotlin和Java具有同样的理论速度(都是编译成JVM字节码)
另外,新语言必须考虑兼容性,为了与存量项目代码和谐共处,Kotlin和Java是互相完美兼容的,两种代码文件可以并存,代码可以互相调用、文件可以互相转换,库文件也可以无障碍地互相调用,据说使用Kotlin基本不会带来额外的成本负担
编程语言本质上还是工具,要运用工具提高效率和质量,还要看具体开发者
Kotlin 特性详解
● time
● streams
● try-with-resources
● 函数扩展,给types、classes或者interfaces新增方法
● null safe
● 不需要new,后缀声明类型
● 自动转换有getters和setters综合属性的类型,例如自动替换getDay()为day,看起来像个field,但实际上是property-getter和setter的概念的融合
● 函数表达式lambdas,it:单个参数的隐式名称
● Higher-order函数,一个参数式函数或者返回时函数的函数
● 扩展函数表达式 = 扩展函数 + 函数表达式 + 高阶函数
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n534" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">fun SQLiteDatabase.inTransaction(func: (SQLiteDatabase) -> Unit) {
beginTransaction()
try {
func(this)
setTransactionSuccessful()
} finally {
endTransaction()
}
}
db.inTransaction {
it.db.delete("users", "first_name = ?", arrayOf("Jake"))
}
</pre>
● in-line函数
● Anko 定义UI
Kotlin 主要特征
● Kotlin 和Java 一样是一种静态类型的编程语言,所有表达式的类型在编译期已经确定了;与在JVM上动态类型的编程语言(例如 Groovy和JRuby)有着鲜明的对比 ● Kotlin 不需要你在源代码中显式地声明每个变量的类型。编译器这种可以从上下文推断变量类型的能力被称作类型推导 ● kotlin类型系统对可空类型、函数类型支持
函数式编程特征
头等函数 ● 把函数(一小段行为) 当做值使用,可以用变量保存,作为参数传递,也可以当做其他函数的返回值 不可变性 ● 使用不可变对象,保证它们的状态在创建之后不能再变化 无副作用 ● 使用的是纯函数。此函数在输入相同时会产生相同的结果,并且不会修改其他对象的状态,也不会和外面的世界交互 ● 函数式编程风格的代码带来的好处是多线程安全;多线程程序中最大的错误来源之一就是,在没有采用适当同步机制的情况下,在不同的线程上修改同一 份数据
如果使用的是不可变数据结构和纯函数,就能保证这样不安全的修改根本不会发生,也就不需要考虑为其设计复杂的同步方案
kotlin的一些具体的优势
首先说说官方网站的解析:
kotlin官方自诩的kotlin第一大特点
简洁
● 当然这是跟原生java来比较的,如果跟php比较的话,kotlin还是稍微复杂一点
● 得益于开发工具的强大,熟练掌握kotlin活,开发效率会接近php甚至比php更高;这就是我作为一个phper感觉到恐怖的地方,这家伙有java的性能和php的开发效率。简直就是梦幻的编程语言
● GitHub上有很多案例了,有人用kotlin改写了一个app,代码行数和函数数量下降了好几十个百分点。简洁是kotlin相对于原生java的一个巨大优势
● 说句实在话,原生java什么都好,就是语法略显啰嗦,开发效率低。而kotlin完美解决了这个问题
kotlin官方自诩的kotlin第二大特点
安全
● 这个也是相对于C++和java来说的,kotlin完全彻底的解决了空指针报错的问题
● 结合强大的编译器,可以在编译阶段发现几乎所有可能存在NPE问题的代码,彻底解决恼人的NPE问题
kotlin官方自诩的kotlin第三大特点
互操作性 ● kotlin基于JVM引擎,充分利用 JVM、Android 和浏览器的现有库
● 这个很吊,可以直接拿所有java的代码库来用;特别是用JetBrains公司的开发工具,各种智能转换,需要手动操作的部分极其的少。过去几十年java积累的各种牛逼的库,拿来就用
kotlin官方自诩的kotlin第四大特点
工具友好
● 开发kotlin的公司JetBrains就是靠做开发工具吃饭的,语言和工具高度结合,真的是很强大
以上就是kotlin官方自吹自擂的kotlin的特点,接下来我补充说明几个
kotlin支持函数式编程
● kotlin对lambda表达式的支持十分的好,虽然lambda表达式增加了代码的复杂度,使代码的可读性下降,但是对于性能还是有一定提升的
kotlin支持协程
● 协程的优势这里就不累述一点,简单了说就是用异步的方式在线程里执行一个请求
● kotlin对协程的封装,那是相当不错的,github上面也已经有很多这方面的示例了。基于协程的安卓开发的代码,也有很多了,大家可以了解下;Go语言感觉没啥学的必要了,Go能干的kotlin都能干,Go不能干的Kotlin也能干
kotlin支持扩展函数
● Kotlin 同 C# 和 Gosu 类似,能够扩展一个类的新功能而无需继承该类或使用像装饰者这样的任何类型的设计模式。 这通过叫做 扩展的特殊声明完成
● Kotlin 支持 扩展函数 和 扩展属性。这个特点非常棒!!!减少了使用设计模式的性能开销,同时又可以扩展类的功能
kotlin支持泛型
● 很多Java开发人员喷Go的理由之一,就是Go语言不支持泛型
● kotlin可是支持泛型的哦,而且比原生java的泛型还吊哦。这下看你们怎么喷,哈哈。虽然我觉得引入泛型,就提高编程语言的学习成本,降低开发效率,我也是不太喜欢泛型的;这种能用编译器解决的问题,最好还是都丢给机器去解决吧
kotlin不再依赖XML
● 哈哈,不知道有多少人跟我一样反感XML。曾经作为创新象征的XML,应该很多人会觉得已经落伍了吧
● 哪怕是kotlin的HTML构建器,也比原生html代码量更少,非常的现代化。
kotlin的官方文档极其强大
● 不仅仅是开发工具棒,kotlin的官方文档也非常的棒
● 而且kotlin官方把文档放到github上面,因此非常容易在英文文档的基础上直接翻译整站的文档;文武双全阅读后发现,kotlin的中文文档,翻译的质量也是十分的高。说句实话,直接读中英文版的kotlin文档,基本不用买书了;直接上github上面,撸代码去了
Kotlin的优势
● 既有Java的完整生态(Kotlin 完全无缝使用各类Java API框架库),又有现代语言的高级特性 (语法糖)
● Kotlin 语言的设计的初衷之一是为了 JetBrains 团队的内部使用,旨在帮助公司降低成本。用过IntelliJ IDEA的都知道JetBrains 团队出品,皆是良品
● 毫无疑问,Kotlin的设计是务实的 ;发展和促进 Kotlin 的好处大于其成本, 在这个过程中, Kotlin 已经演变成了一个 JetBrains 的效率工具。其强烈的务实取向强烈地吸引了一大批Java程序员。
● Kotlin 也成为 JetBrains 工具生态系统中重要的一员;希望在未来几年内 Kotlin 成为主要的非 Java的 JVM语言,甚至有一天成为下一个Java语言。可以预测的是,Kotlin 将大大提升整个Java 互联网开发者的效率和质量
● JVM最初是为了支持java编程语言;然而,随着时间的流逝,越来越多的语言被改编或设计运行在JVM上。除了java语言,比较知名的JVM上的编程语言还有:Groovy、Scala、Clojure等
尾述
点击 Android 进阶 免费获取 更多学习笔记 + 面试视频
技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面
Android 架构师之路还很漫长,与君共勉
PS:有问题欢迎指正,可以在评论区留下你的建议和感受;
欢迎大家点赞评论,觉得内容可以的话,可以转发分享一下
网友评论