我为什么放弃java学习Kotlin?

标签: android开发 io大会
27868人阅读 评论(32) 收藏 举报
分类:

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的诞生过程:

作为目前广受欢迎的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的使用把。

查看评论

Kotlin VS Java:基本语法差异

Kotlin比Java更年轻,但它是一个非常有前途的编程语言,它的社区不断增长。 每个人都在谈论它,并说它很酷。 但为什么这么特别? 我们准备了一系列文章,分享我们在Kotlin开发Android应...
  • sergeycao
  • sergeycao
  • 2017-02-11 15:51:40
  • 18510

Kotlin真的会取代JAVA吗?

自从Kotlin 成为 Android 开发一级语言,Kotlin确实以其实用,高效赢得了海外很多公司和开发者的认可,比如Square的Jake大神一直在推Kotlin。Kotlin在国外至少有将近2...
  • Gamay
  • Gamay
  • 2017-06-01 14:06:22
  • 3503

Kotlin:比 Java 做得更好

这几年互联网领域先后经历了几次大革命,包括物联网、大数据、云计算等,如今则处于人工智能的火热时代。伴随其中的一个重要的编程语言便是Java。(Java口号“一次编写,到处运行”)Java由于其强大的跨...
  • broadview2006
  • broadview2006
  • 2018-03-13 10:17:57
  • 334

Kotlin概述与Java的比较

Kotlin是JetBrains的一种新的编程语言。它首次出现在2011年,JetBrains推出了名为“科特林”的项目。 Kotlin是开源语言。 基本上像Java一样,C和C ++ - Kotli...
  • sergeycao
  • sergeycao
  • 2017-05-28 10:03:05
  • 6691

不服来战,看Kotlin如何完爆Java

前言:Kotlin因支持谷歌和简化Android开发而声名鹊起。看看它如何解决Java的许多痛点。Why Kotlin?如果我今天被问到如何区别开发Android应用程序与其他领域开发时,我会毫不犹豫...
  • FL63Zv9Zou86950w
  • FL63Zv9Zou86950w
  • 2017-11-23 09:15:36
  • 14936

安卓开发的两种语言比较——Java & Kotlin

安卓、Java、Kotlin历史简介。Kotlin与Java的比较。
  • u014773418
  • u014773418
  • 2017-11-20 15:25:01
  • 613

Kotlin可以拯救Java程序员,但Java9程序员不用!

不知不觉Java8已经三年了,团队转Kotlin也已经小一年。犹记得Java8推出Stream API时候的兴奋——真是Java标准库最好的改进之一。当然,还有Optional。事情发展往往就是这样:...
  • zhanglu0223
  • zhanglu0223
  • 2017-09-24 21:25:35
  • 1627

Kotlin与Java的使用区别

1.类的声明 java类的成员变量,构造方法,成员方法声明方式public class JavaBean { private String name; public JavaBean(...
  • u012762986
  • u012762986
  • 2017-05-31 17:23:36
  • 2041

Kotlin最简单的入门教程——与Java互相调用

Kotlin 中调用 Java 代码import java.util.*fun demo(source: List) { val list = ArrayList() // “for”...
  • handongyu2011
  • handongyu2011
  • 2017-06-15 10:49:29
  • 2565

Kotlin-Java中调用Kotlin

在java中调用kotlin代码也是很容易的事属性一个kotlin属性希望被编译通过,那么它需要有以下java元素: - getter方法,方法名要以get作为前缀 - setter方法,方法名要...
  • Android_app
  • Android_app
  • 2017-07-12 12:29:14
  • 6498
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 18万+
    积分: 2040
    排名: 2万+
    我的公众号
    博客专栏