源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Android开发必备知识 为什么说Kotlin值得一试

  • 时间:2020-11-04 12:12 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android开发必备知识 为什么说Kotlin值得一试
[b]1、Hello, Kotlin [/b] Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处。 [b]1.1 Kotlin的身世 [/b] [list] [*]写了许久Java,有没有发现其实你写了太多冗余的代码?[/*] [*]后来你体验了一下Python,有没有觉得不写分号的感觉真是超级爽?[/*] [*]你虽然勤勤恳恳,可到头来却被NullPointerException折磨的死去活来,难道就没有受够这种日子么?[/*] [*]直到有一天你发现自己已经写了好几十万行代码,发现居然全是getter和setter! [/*] [/list] 哈哈,实际上你完全可以不用这么痛苦,用Kotlin替代Java开发你的程序,无论是Android还是Server,你都能像之前写Java一样思考,同时又能享受到新一代编程语言的特性,说到这里你是不是开始心动了呢?下面我就通过这篇文章来给大家介绍一下Kotlin究竟是何方神圣。 话说,Kotlin是JetBrain公司搞出来的,运行在JVM上的一门静态类型语言,它是用波罗的海的一个小岛的名字命名的。从外观上,乍一看还以为是Scala,我曾经琢磨着把Scala作为我的下一门语言,不过想想用Scala来干嘛呢,我又不做大数据,而它又太复杂了o(╯□╰)o [b]用Kotlin创建一个数据类[/b]
data class Mondai(var index: Int = 0,
     var title: String = "",
     val ans: ArrayList<String> = ArrayList(),
     var correct: Int = 0,
     var comment: String = "",
     var color: String = "",
     private var lives: Int = 50)
最初是在intelliJ的源码中看到Kotlin的,那时候Kotlin的版本还不太稳定,所以源码总是编译不过,真是要抓狂啊,还骂『什么破玩意儿!为什么又出来新语言了?Groovy还没怎么学会,又来个Kotlin!』话说,Kotlin,难道是『靠它灵』的意思?? 其实经过一年多的发展,Kotlin 1.0已经release,feature基本完善,api也趋于稳定,这时候尝试也不会有那种被坑的感觉了。过年期间也算清闲,于是用Kotlin做了个app,简单来说,就是几个感觉: [list] [*]思路与写Java时一样,不过更简洁清爽[/*] [*]少了冗余代码的烦恼,更容易专注于功能的开发,整个过程轻松愉快[/*] [*]扩展功能使得代码写起来更有趣[/*] [*]空安全和不可变类型使得开发中对变量的定义和初始化倾注了更多关注[/*] [*]啊啊,我再也不用写那个findViewById了,真的爽爆有木有! [/*] [/list] [b]1.2 第一个Kotlin程序 [/b] Kotlin开发当然使用JetBrain系列的IDE,实际上intelliJ idea 15发布时就已经内置了Kotlin插件,更早的版本则需要到插件仓库中下载安装Kotlin插件——在安装时你还会看到有个Kotlin Extensions for Android,不要管他,已经过时了。安装好以后,我们就可以使用Kotlin进行开发了。 接下来我们用Android Studio创建一个Android工程,比如叫做HelloKotlin,在app目录下面的build.gradle文件中添加下面的配置:
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
ext.anko_version = '0.8.2'
ext.kotlin_version = '1.0.0'
……

dependencies{
……
 compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
 compile "org.jetbrains.anko:anko-sdk15:$anko_version"
 compile "org.jetbrains.anko:anko-support-v4:$anko_version"
 compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
……
}

buildscript {
 repositories {
  jcenter()
 }
 dependencies {
  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
 }
}
……

这里添加了kotlin对android的扩展,同时也添加了kotlin的gradle插件。 接下来就可以编写kotlin代码了——等等,Android Studio会帮我们生成一个MainActivity,你可以直接在菜单 Code -> Convert Java file to Kotlin file 将这个java代码转换为kotlin代码。截止到现在,你什么都不用做,程序就已经可以跑起来了。 [b]2、完美为Java开发者打造 [/b] [b]2.1 通用的集合框架 [/b] 我们都知道Jvm上面的语言,像什么Java、Groovy、Jython啥的,都是要编成虚拟机的字节码的,一旦编成字节码,在一定程度上大家就都平等了。 英雄不问出身啊 有人做过一个非常形象的比喻:Java虚拟机语言就是打群架。Kotlin正是充分利用了这一点,它自己的标准库只是基于Java的语言框架做了许多扩展,你在Kotlin当中使用的集合框架仍然跟你在Java当中一样。 举个例子,如果你想要在Kotlin中使用ArrayList,很简单,Java的ArrayList你可以随意使用,这个感觉跟使用Java没有任何区别,请看:
//实际上就是创建一个ArrayList
 val list = arrayListOf(1,2,3,4)
 list.add(5)
 list.remove(3)
 for(item in list){
  println(item)
 }
当然,Kotlin标准库也对这些做了扩展,我们在享用Java世界的一切资源的同时,还能比原生Java代码更滋润,真是爽爆有木有:
 val list = arrayListOf(1, 2, 3, 4, 5)
 
 //doubleList = [2,4,6,8,10]
 val doubleList = list.map { 
  it * 2
 }
 
 //oddList = [1,3,5]
 val oddList = list.filter{
  it % 2 == 1
 }
 
 //将list挨个打印出来
 list.forEach { 
  println(it)
 }
[b]2.2 与Java交互 [/b] Kotlin的标准库更多的是对Java库的扩展,基于这个设计思路,你丝毫不需要担心Kotlin对Java代码的引用,你甚至可以在Kotlin当中使用Java反射,反正只要是Java有的,Kotlin都有,于是有人做出这样的评价: Kotlin就是Java的一个扩展 这样说Kotlin显然是不公平的,但就像微信刚面世那会儿要为QQ接收离线消息一样,总得抱几天大腿嘛。 有关从Kotlin中调用Java的官方文档在此[Calling Java code from Kotlin ](Anko@Github [b]3.8 方法数之痛 [/b] 我曾经尝试用Scala写了个Android的HelloWorld,一切都配置好以后,仅仅引入了Scala常见的几个库,加上support-v4以及appcompat这样常见的库,结果还是报错了。是的,65K。。。而且用Scala开发Android的话,基于gradle的构建会让整个app的build过程异常漫长,有时候你会觉得自己悟出了广义相对论的奥义,哦不,你一定是晕了,时间并没有变慢。 相比之下,Kotlin的标准库只有7000个方法,比support-v4还要小,这正反映了Kotlin的设计理念:100% interoperable with Java。其实我们之前就提到,Java有的Kotlin就直接拿来用,而Scala的标准库要有5W多个方法,想想就还是想想算了。 [b]4、小结 [/b] 目前Kotlin 1.0已经release,尽管像0xffffffff识别成Long类型这样的bug仍然没有解[url=https://youtrack.jetbrains.com/issue/KT-4749]详情[/url]:
val int: Int = 0xffffffff // error
val anotherInt: Int = 0xffffffff.toInt() // correct
不过,Kotlin的教学资源和社区建设也已经相对成熟,按照官方的说法,Kotlin可以作为生产工具投入开发,详情可以参考:[url=https://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-released-pragmatic-language-for-jvm-and-android/]Kotlin 1.0 Released: Pragmatic Language for JVM and Android[/url]。 敢于吃螃蟹,多少有些浪漫主义色彩,我们这些程序员多少可以有些浪漫主义特质,不过在生成环境中,稳定高于一切仍然是不二法则。追求新技术,一方面会给团队带来开发和维护上的学习成本,另一方面也要承担未来某些情况下因为对新技术不熟悉而产生未知问题的风险——老板们最怕风险了~~ 基于这一点,毫无疑问,Kotlin可以作为小工具、测试用例等的开发工具,这是考虑到这些代码通常体量较小,维护人数较少较集中,对项目整体的影响也较小;而对于核心代码,则视情况而定吧。 就我个人而言,长期下去,Kotlin很大可能会成为我的主要语言,短期内则仍然采用温和的改革方式慢慢将Kotlin渗透进来。 一句话,Kotlin是用来提升效率的,如果在你的场景中它做不到,甚至成了拖累,请放开它。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部