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/JetBrains/kotlin
  • 2013.8 支持androidstudio
  • 2014.6 全新的开源web站点和域名 https://Kotlinlang
  • 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)
//         设置[07]的字体颜色
        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?