Getting started with Kotlin on Android

摘要

Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrain设计开发并开源,与Java相比,Kotlin的语法更简洁,更具表达性,而且提供了更多的特性。两位ThoughtWorks高级咨询师共同为我们分享Kotlin在Android上的运用。

视频内容

Java VS Kotlin

在Java的使用中会遇到很多问题。它的语法繁琐,API低级;随时可能出现null pointer问题;有各种各样的util类和混乱的泛型。

Data Class

在Java Bean里有成员函数string topic、string type和list speakers。

Getter/Setter可以使Java成员既有封装性,又能对外暴露很多接口。

还有很多其它的方法,比如toString、hashCode和equals。

Singleton

而Kotlin要实现一个单例,只需一个关键字“object”。

Optional

Null pointer是代码中一个常见的bug。

Late-Initialized&Lazy

在代码中经常会遇到一些方法,它们不需要在构造函数中进行初始化操作,这时就可以通过lateinit var关键字把它声明成懒加载模式。

Full name是通过last name和first name组装起来的,只有用到full name的时候,才会调出lazy的这个表达式,生成一个值,非常方便,解决了懒加载的问题。

Extensions

在Java中,要想扩展一个类,我们会写一堆Utils。

而在Kotlin中,我们可以直接对double对象进行扩展,再也不需要Utils的类了。

Collections

常见的Collections有Stack、Map、Queue和List等等。

在Kotlin中把Collections分为mutable和immutable两类,这样有助于消除错误,设计更好的API。

Generics

我们要创造一个协变的应用才能引用它子类的集合,与之对应的还有逆变。

在Kotlin里数组默认不是协变的。

对于不可变集合是默认协变,可变集合默认是逆变的。

总结一下

Kotlin提供了高级的语法,例如data、object等。

对于null pointer问题,它有optional对象。

有val、late-intialized、lazy和Collections支持。

可以用扩展语法让代码更加可读。

Generics简单好用。

Kotlin cool feature

Inline function

如果在开发过程中发现有性能问题,可以把代码进行优化,在代码运行起来之后,body block会被封装成一个函数对象。加入了Inline,body就会被Inline到函数调用的地方去。

Inline还有个功能叫reified。当我们读取网络返回的时候,会用Gson来解析字符串,在写的过程中会发现语法有冗余。引入reified以后,可以把类型声明成reified,这样在函数题里就会引用到这个类型具体的Class。Kotlin有一定的类型推导功能。

Sealed Class

SealedClass可以限制住一个副类一共有多少个子类。

Delegated properties

对于一个property,可以把它Delegated一个对象上,每当读写property的时候,它都会调用对应的函数。

Coroutines

Coroutines把回调式的写法改成了流式的写法。

总结一下

Inline function减少了运行的开销。

SeadledClass限制了类的层级。

Delegate使得代码更加简洁。

Coroutines提高了异步代码的可读性。

Kotlin in Android

在Android上有一个常见的类叫做viewholder。

Kotlin在Android上可以自动把view找出来,不需要手写代码。

Kotlin's Reference

引入Kotlin

已知问题

Kotlin与mockito的兼容性。

在Kotlin里的静态代码检查工具还不完善。

Kotlin对于Java里的一些关键词和操作符的语义做了改变。

以上是我今天分享的内容,感谢聆听!

原文发布于微信公众号 - IT大咖说(itdakashuo)

原文发表时间:2017-07-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏mathor

FileInput(Output)Stream

1294
来自专栏程序猿DD

程序员你为什么这么累【续】:编码习惯之工具类规范

一个项目不可能没有工具类,工具类的初衷是良好的,代码重用,但到了后面工具类越来越乱,有些项目工具类有几十个,看的眼花缭乱,还有不少重复。如何编写出好的工具类,我...

2416
来自专栏程序员维他命

iOS 代码规范

花了一个月的时间结合几篇博客和书籍写了这套 iOS 代码规范(具体参考底部的参考文献部分)。这套代码规范除了有仅适用于 iOS 开发的部分,还有其他的比较通用性...

2162
来自专栏Linyb极客之路

编码习惯之工具类规范

一个项目不可能没有工具类,工具类的初衷是良好的,代码重用,但到了后面工具类越来越乱,有些项目工具类有几十个,看的眼花缭乱,还有不少重复。如何编写出好的工具类,我...

4139
来自专栏Golang语言社区

io.Writer 解析

简介 io.Writer 跟 io.Reader 一样,都是 Interface 类型,功能非常强大,在任何需要写入数据,处理数据流的地方,我们都应该尽可能使用...

39412
来自专栏FreeBuf

浅析ReDoS的原理与实践

*本文原创作者:MyKings,本文属FreeBuf原创奖励计划,未经许可禁止转载 ReDoS(Regular expression Denial of Ser...

8045
来自专栏Aloys的开发之路

能让程序做的事情坚决不用人来做——批量修复markdownlint MD034警告

欢迎和大家交流技术相关问题: 现在各种编程语言都有自己的lint工具来做静态检查,防止一些低级错误并维持统一的风格。Markdown这样的样式标记语言也不例外,...

3479
来自专栏Android群英传

Kotlin之旅——类特性

1072
来自专栏个人随笔

当Java遇到XML 的邂逅+dom4j

1652
来自专栏Android知识点总结

4-SIII-Android数据固化之Xml的Dom解析和存储

832

扫码关注云+社区

领取腾讯云代金券