了解kotlin并开始使用其作开发,是从最近以前作的项目开始之初,用的是kotlin,发现kotlin是一个特简洁,不少语法糖提供使用,能够提升开发效率的语言。谷歌在2017年谷歌大会正式宣布支持android支持kotlin语言开发,而在更早其实kotlin在2011年左右就已经在JetBrains开始为它着手开始设计,而目前有些大公司已经有配套的对于kotlin和java会有两个语言的开发配套app,说明kotlin势在必行...确实在有些博客看到有些文章也提到过,kotlin的编译速度和java对比,不管是初次编译或者增量编译,都是和java保持着差很少的速度,损失了大概10几个百分点速度极限左右。下面咱们来看看kotlin,有个文章的关于kotlin的ppt弄的很好,都是些上手练习的,连接:https://acemerlin.github.io/posts/uncategorized/2017-03-23-kotlin-presentation/php
一、相对于咱们在平时开发中,一个框架的搭建,若是使用其余语言,(1)须要学习其余语言的成本 (2)从新在该语言下从新开发,所幸其实kotlin是基于jvm的静态编程语言,能够无缝对接java,互相能够调用。这个给咱们带来了福音。java
二、kotlin有不少的语法糖,有个我的以为特别重要是,python
(1)对于空指针判断的特性,在编译的时候已经帮你提早先作了判断了,并且语法使用起来更简洁,不须要使用更多的if ,else 而是改用 ?,?: 等符号就能够作好判断,简单简洁使用。android
(2)数据对象实体类的建立,再也不须要手动建立set或get方法,直接kotlin帮你编译生成了,使用序列化也是更加简洁git
(3)android开发的同窗是不很不喜欢常常须要findviewbyId这些重复的代码呢,以为严重影响开发效率呢,kotlin帮你能够直接调用layout里面的id而后在编译过程当中直接帮你找,其实deCompile下,能够看到是使用了缓存加findviewbyid,kotlin的jvm编译器帮你作了这些工做了,而你只须要import到对应layout的id,直接就可使用了,是不很简洁; 相似kotlin大量使用了 Lambda的设计,好比view.setOnclickListener{} ,能够再也不须要参数,让代码看起来更加简洁,相似还有不少.github
(4)for循环支持更多的语法特性,switch传统的支持 int数值判断,而到了kotlin使用when,能够是类的判断,能够是各类其余类型的数据,使用起来更简洁,摆脱了可能会使用大量的if,else的语句,让代码更容易看懂。编程
三、kotlin的开发能够代码量至少能够减小百分之二十多的代码量,能够大大减小咱们平时的开发工做量。后端
by the way,kotlin也能够做为像除了groovy做为更有效的DSL构建工程的脚本语言,kotlin和groovy在有些语法上有部分差别是类似的,不过kotlin对于安全性判断和严谨性是更胜groovy一筹的,groovy做为的是动态编程语言,小编暂时没作研究,有兴趣的能够了解下。缓存
不过咱们在学习kotlin平时开发中,有必要知道能够java与kotlin如何进行一个转换,android studio是在基于idea的,因此idea或者android studio均可以很轻松能够看到他们之间互相转换,有利于咱们学习kotlin是怎么下面咱们进入正题:安全
看下面简单代码:
import android.content.Intent import android.os.Bundle import android.support.v7.app.AppCompatActivity import danny.test.TestActivity import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) sample_text.setOnClickListener{ startActivity(Intent(baseContext, TestActivity::class.java)) } } }
而后咱们选择菜单栏 Tools -> Kotlin -> show Kotlin Bytesdecode,而后进入
点击左上角的Decompile,就能够生成咱们看到的反编译成的java代码了,以下
public final class MainActivity extends AppCompatActivity { private HashMap _$_findViewCache; protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(-1300027); ((TextView)this._$_findCachedViewById(id.sample_text)).setOnClickListener((OnClickListener)(new OnClickListener() { public final void onClick(View it) { MainActivity.this.startActivity(new Intent(MainActivity.this.getBaseContext(), TestActivity.class)); } })); } public View _$_findCachedViewById(int var1) { if (this._$_findViewCache == null) { this._$_findViewCache = new HashMap(); } View var2 = (View)this._$_findViewCache.get(var1); if (var2 == null) { var2 = this.findViewById(var1); this._$_findViewCache.put(var1, var2); } return var2; } public void _$_clearFindViewByIdCache() { if (this._$_findViewCache != null) { this._$_findViewCache.clear(); } } }
其实认真观察咱们每次调用sample_text 这个变量的时候,其实都是调用了_$_findCachedViewById这么个方法,每次去从缓存去找,没有缓存就才直接findviewById而后添加缓存,其实这样对于咱们我的理解kotlin的代码的底层实现是不颇有好处呢
有时候在想,语言的底层是怎么实现的,实际上是不蛮重要的,知其然而因此然,对于咱们之后去接触新的语言,实际上是不有好处呢。大概了解了下,像好比php 1.4仍是1.5的版本有些是像java学习了,其实语言之间有些特性或者语法糖有些是互相学习,也是有点套路的,像咱们java的不少语法实际上是继承了c语言的语法,数据类型,关键字这些,从某个方面来讲,也听郭神也说,以为java顶多属于半个面向对象的语言..最近也在接触groovy,groovy对于构建建立工程,动态配置,能够写本身的我的插件,用来动态配置工程的差别化需求是个很好的语言。
总之,语言的学习咱们能够先了解它的使用场景、特性、能够作什么、是否在项目中使用有好处等等。好比groovy天生是面向java工程的DSL构建工程的动态编程语言,python能够用来作脚本开发,android的打包等,服务器开发、大数据。
而kotlin能够 开发咱们的android、后端、脚本等。