首页 > 代码库 > 我为什么放弃java学习Kotlin?
我为什么放弃java学习Kotlin?
Kotlin简介
Kotlin早已是Android开发中的热门话题了,github上越来越多的项目是用Kotlin开发。但是这门语言一直处于很尴尬的境地,一方面自己不遗余力的挖掘自己在Android开发方面的作用,一方面却不是官方支持的语言,导致很多人实际持观望态度。
昨天的I/O大会上谷歌宣布Kotlin正式成为Android的官方语言。有句话叫做没图说个瘠薄,来2张高清大图先:
原本我是准备通宵看直播,想想自己的英语,洋文听不懂,还是第二天看录播把,对于Kotlin,我是昨天刚知道的,但是!!我曾在google搜出来一个帖子,是在15年6月,就预言了kotlin可能取代java。那么关于kotlin和java的区别在哪。这个怎么解释呢?你们可以理解成swift和object-c的区别把。近两天,各大网站,微信公众号。全部被kotlin刷屏了。又是一波技术热,其实,在这透个底,我不会mvp,mvvn,rx,RN 等等等等(热修复正打算看,就不放在里面了)。那么这波技术热,我会不会参与其中呢?那么,很明显,我会。至于Kotlin到底是什么,我们接下来在看。
Kotlin是什么?
kotlin是来自JetBrains公司,以圣彼得堡附近的kotlin岛命名。他可以运行在JVM虚拟机上,同样可以编译成Javascript源码,与java100%兼容。我们来看下Kotlin的诞生过程:
- 2011.6 项目公开
- 2012.2 开源 https://github.com/JetBrains/kotlin
- 2013.8 支持androidstudio
- 2014.6 全新的开源web站点和域名 https://Kotlinlang.org
- 2015.3 Eclipse插件亮相
- 2015.4 Anko亮相
- 2016.2 1.0正式版发布
作为目前广受欢迎的Java IDE IntelliJ 的提供商,在 Apache 许可下已经开源其Kotlin 编程语言。而恰巧我一直用的IntellJ Idea。不得不说很佩服JetBrains这家公司,不仅仅制作了最流行的Java开发工具IntelliJ IDEA,Android Studio 就是基于Intellij IDEA社区版开发的,还创建了一门自己的语言。而JetBrains却并不是一家美国的公司,而是位于捷克的布拉格。JetBrains对Kotlin的愿景:用同一种语言,桥接多平台的不同应用的端对端开发,包括全栈web应用,Android和ios客户端,嵌入式/物联网等等
为什么需要kotlin?
- 空类型安全
- Lambda表达式
- 扩展方法
- 类型推导
- 胜任java能做的所有事,还要更加难
- 没有分号!!!!
妈妈在也不用担心我的NullPointerExpection了,因为一般情况下,如果你项目有空指针,是在运行后报错,而用了kotlin,编译直接会不通过,不过缺少了NullPointerExpection,编码是不是少了很多乐趣呢?Lambda表达式不知道是啥?我也不知道!!!不过有了Kotlin你就不要担心你不会Lambda了,当时我是因为看不懂所以放弃的,但是在Kotlin里面,你要是看不懂,来和我讲,看我不打死你!!哼哼~~~
Androidstudio 3.0自动适应了Kotlin,当然现在你可以装插件,或者直接用IntellJ也好,这个我们后面在说,我们可以把我们项目的所有的java文件直接转化成Kotlin文件,最后Kotlin有一个优势,没有分号!!没有分号!!没有分号!!重要的事说三遍,在也不用担心括号太多,分号往哪添的问题了~~~
我为什么放弃java学习Kotlin?
昨天刚出来,现在csdn投票现在也在问java会不会被kotlin取代。我之前也有留言。毕竟google是爸爸,他说啥就是啥。不过,我所认为的取代仅仅是在Android开发中取代,而不是任何场景。昨天因为没什么时间,今天我也简要学习了下kotlin。语法应该和js差不多把。我记得前两年在学校我看html的时候,我是拒绝写js和css的。学了java在看js就是一脸蒙蔽。不过,为了学Kotlin,我拼了,写完之后发现真的是so easy。
如何配置Kotlin
Androidstudio是需要安装插件的,而IntellJ并不需要,因为大多数开发者用的Androidstudio,那么就跟着我的步骤,一步一步来~:
首先,我们既然是装插件,我们一如既往的打开File->Settings->Plugins->Install JetBrains plugins…
安装完重启它就行了,我这边安装过了,就不做演示了。现在我们就可以愉快的编写我们Kotlin代码了~~~
Hello Kotlin
helloworld是所有程序猿学某一门程序的第一课,不过Hello Kotlin更适合我。
那么,我们首先先新建一个Kotlin的Activity文件:
我这边是已经写好的,你生成完的代码应该是这样:
class MainActivity : AppCompatActivity() {}
空空如也,我们先重写它的oncreate()方法,然后把我们设置的布局放进去:
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) }}
一个简单的hello Kotlin就完成了~
不知道还有没有记得我的android第一课,这次我们来一个Kotlin第一课把~
// kotlin_button = findViewById(R.id.kotlin_test) as Button?// main.kotlin_test.setText("这是一个测试")// main.kotlin_test.text = "这是一个测试" kotlin_textview = findViewById(R.id.get_kotlin_test) as TextView? kotlin_textview!!.text = "KotLin第一课" kotlin_textview!!.textColor = Color.RED kotlin_textview!!.backgroundColor = Color.BLUE var ssb = SpannableStringBuilder(kotlin_textview!!.text)// 设置[0,7]的字体颜色 ssb.setSpan(ForegroundColorSpan(Color.YELLOW), 0, 6, Spanned.SPAN_EXCLUSIVE_INCLUSIVE) kotlin_textview!!.text = ssb
前面的注释是让你们理解,对于findviewbyid和settext在Kotlin中可以这么写,好了,话不多说,我们先看下运行效果:
可以了,perfect~
Hello anko
anko是用于依赖于Kotlin实现的,首先,我们需要做如下依赖:
// Anko compile ‘org.jetbrains.anko:anko-sdk15:0.8.2‘ // sdk19, sdk21, sdk23 are also available compile ‘org.jetbrains.anko:anko-support-v4:0.8.2‘ // In case you need support-v4 bindings compile ‘org.jetbrains.anko:anko-appcompat-v7:0.8.2‘ // For appcompat-v7 bindings
anko到底是用来干什么的呢?他可以把一个布局写在方法里,不过我不是很推荐使用anko,因为这样MVC感觉就不存在了,而且把代码追溯到原始时代了,一个复杂的页面,你用anko写起来,功能和布局写在一个方法里,这能玩?不过,我们还是要写个demo跑一下玩玩,代码很简单:
verticalLayout { button { id = R.id.kotlin_test text = "我是kt文件写出来的布局按钮" onClick { kotlin_textview!!.text = kotlin_button!!.text.toString() toast("Hello") startActivity<SecondActivity>("text" to "我是第一个页面进去的") } } textView { id = R.id.hello_kotlin text = "Hello Kotlin" } }
verticalLayout是一个纵向的线性布局,我们放一个按钮和一个textview。我们跑一下,看个效果先:
搞定~,不过不知道大家仔细看我的代码没有,我写了一个startactivity方法,没错,startActivity<SecondActivity>()
这个就是启动另一个Activity。startActivity<SecondActivity>("text" to "我是第一个页面进去的")
我们可以看我前面放了一个text后面放了一个string,中间有一个to,这个就是Activity带参数的传值使用。我们看下我们SecondActivity是如何调用这个获取到的数据的:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.second) val extra = intent.getStringExtra("text") text_second.text = extra.toString() }
是不是soeasy。我们来跑一下先:
感觉怎么样,说实话,有些时候我感觉都比annotation好使,一波666送上,至于后面还有一些好多的,fragment,adapter,自定义view等等,都是可以解决的。我们可以通过:
得到你用java写的方法转换而成的Kotlin,不过有一个弊端就是Kotlin并不能转换成java,所以,慎用!!
总结
从今天下午半天我对kotlin的了解,就是好用,666。如果熟练掌握,我们的代码会更简单,更简洁。我会在以后的学习中,不断的穿插Kotlin的使用。
对于个人的项目来转向Kotlin,通常不是很难的选择,毕竟Kotlin是那么优秀的语言,相信很多人还是愿意尝试并使用这个事半功倍的语言的。
而比较难抉择的情况是如果如何让团队转用Kotlin,个人认为团队难以转用的原因有很多,比如学习成本,历史包袱等等。但其实根本原因还是思维方式的问题,歪果仁喜欢用工具来提升开发效率,因为人力成本很高。而国内团队提高效率的办法通常是增加成员。
不久以后,android开发会慢慢从java转向kotlin。所以,如果有时间,还是尽量多的知道一点关于kotlin的使用把。
我为什么放弃java学习Kotlin?