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 是来自 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 客户端,嵌入式 / 物联网等等
妈妈在也不用担心我的 NullPointerExpection 了,因为一般情况下,如果你项目有空指针,是在运行后报错,而用了 kotlin,编译直接会不通过,不过缺少了 NullPointerExpection,编码是不是少了很多乐趣呢?Lambda 表达式不知道是啥?我也不知道!!!不过有了 Kotlin 你就不要担心你不会 Lambda 了,当时我是因为看不懂所以放弃的,但是在 Kotlin 里面,你要是看不懂,来和我讲,看我不打死你!!哼哼~~~
Androidstudio 3.0 自动适应了 Kotlin,当然现在你可以装插件,或者直接用 IntellJ 也好,这个我们后面在说,我们可以把我们项目的所有的 java 文件直接转化成 Kotlin 文件,最后 Kotlin 有一个优势,没有分号!!没有分号!!没有分号!!重要的事说三遍,在也不用担心括号太多,分号往哪添的问题了~~~
昨天刚出来,现在 csdn 投票现在也在问 java 会不会被 kotlin 取代。我之前也有留言。毕竟 google 是爸爸,他说啥就是啥。不过,我所认为的取代仅仅是在 Android 开发中取代,而不是任何场景。昨天因为没什么时间,今天我也简要学习了下 kotlin。语法应该和 js 差不多把。我记得前两年在学校我看 html 的时候,我是拒绝写 js 和 CSS 的。学了 java 在看 js 就是一脸蒙蔽。不过,为了学 Kotlin,我拼了,写完之后发现真的是 so easy。
Androidstudio 是需要安装插件的,而 IntellJ 并不需要,因为大多数开发者用的 Androidstudio,那么就跟着我的步骤,一步一步来~:
首先,我们既然是装插件,我们一如既往的打开 File->Settings->Plugins->Install JetBrains plugins…
安装完重启它就行了,我这边安装过了,就不做演示了。现在我们就可以愉快的编写我们 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.REDkotlin_textview!!.backgroundColor= Color.BLUEvar 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~
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_testtext="我是kt文件写出来的布局按钮"onClick {
- kotlin_textview!!.text= kotlin_button!!.text.toString()
- toast("Hello")
- startActivity("text" to "我是第一个页面进去的")
- }
- }
- textView {id= R.id.hello_kotlintext="Hello Kotlin"}
- }
verticalLayout 是一个纵向的线性布局,我们放一个按钮和一个 textview。我们跑一下,看个效果先:
搞定~,不过不知道大家仔细看我的代码没有,我写了一个 startactivity 方法,没错,
这个就是启动另一个 Activity。
- startActivity<SecondActivity>()
我们可以看我前面放了一个 text 后面放了一个 string,中间有一个 to,这个就是 Activity 带参数的传值使用。我们看下我们 SecondActivity 是如何调用这个获取到的数据的:
- startActivity<SecondActivity>("text" to "我是第一个页面进去的")
- 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 的使用把。
来源: http://blog.csdn.net/sw950729/article/details/72566523