文档章节

Kotlin个人理解入门篇

DannyCoder
 DannyCoder
发布于 10/19 13:13
字数 1594
阅读 32
收藏 0

了解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/

1、相对于我们在平时开发中,一个框架的搭建,如果使用其他语言,(1)需要学习其他语言的成本 (2)重新在该语言下重新开发,所幸其实kotlin是基于jvm的静态编程语言,可以无缝对接java,互相可以调用。这个给我们带来了福音。

2、kotlin有很多的语法糖,有个个人觉得特别重要是,

(1)对于空指针判断的特性,在编译的时候已经帮你提前先做了判断了,而且语法使用起来更简洁,不需要使用更多的if ,else 而是改用 ?,?:  等符号就可以做好判断,简单简洁使用。

(2)数据对象实体类的创建,不再需要手动创建set或get方法,直接kotlin帮你编译生成了,使用序列化也是更加简洁

(3)android开发的同学是不很不喜欢经常需要findviewbyId这些重复的代码呢,觉得严重影响开发效率呢,kotlin帮你可以直接调用layout里面的id然后在编译过程中直接帮你找,其实deCompile下,可以看到是使用了缓存加findviewbyid,kotlin的jvm编译器帮你做了这些工作了,而你只需要import到对应layout的id,直接就可以使用了,是不很简洁;    类似kotlin大量使用了  Lambda的设计,比如view.setOnclickListener{}  ,可以不再需要参数,让代码看起来更加简洁,类似还有很多.

(4)for循环支持更多的语法特性,switch传统的支持 int数值判断,而到了kotlin使用when,可以是类的判断,可以是各种其他类型的数据,使用起来更简洁,摆脱了可能会使用大量的if,else的语句,让代码更容易看懂。

3、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、后端、脚本等。

© 著作权归作者所有

共有 人打赏支持
DannyCoder
粉丝 2
博文 68
码字总数 36116
作品 0
广州
程序员
私信 提问
使用Kotlin构建MVVM应用程序—第一部分:入门篇

简书地址:www.jianshu.com/p/80926d9e6… 目录 使用Kotlin构建MVVM应用程序—第一部分:入门篇 使用Kotlin构建MVVM应用程序—第二部分:Retrofit及RxJava 使用Kotlin构建MVVM应用程序—第三...

ditclear
2017/11/18
0
0
使用Kotlin构建MVVM应用程序—提高篇:Dagger-Android

写在前面 提高篇的目的是想着写一些较深入的知识,包含一些源码分析、架构设想、脚手架搭建的东西。 面向的人群是中高级的开发者或者愿意深入了解如何快速构建Kotlin&&MVVM应用的人群。 Dagg...

ditclear
06/27
0
0
学 Flutter,能挽救Android 开发吗?

Flutter 是什么 ? Flutter是谷歌的推出的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组...

Tamic
11/14
0
0
使用Kotlin构建MVVM应用程序—第一部分:入门篇

目录 使用Kotlin构建MVVM应用程序—第一部分:入门篇 使用Kotlin构建MVVM应用程序—第二部分:Retrofit及RxJava 使用Kotlin构建MVVM应用程序—第三部分:Room(敬请期待) 写在前面 使用DataB...

ditclear
2017/11/18
0
0
Kotlin从入门到放弃(三)——协程

引言 这篇主要是将以下kotlin里面的协程,当然这个概念已经随着kotlin的文档被广泛得知了,不过还是用大量代码记录一下吧 一、概念    Coroutine,翻译为协程,意思为各个子任务程协作运行...

jara0705
2017/12/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

揭秘 | 双11逆天记录背后的数据库技术革新

摘要: 第十个天猫“双11”狂欢节圆满落幕,如今双11已不仅仅是天猫的盛会,更是阿里技术人的新年 每一个数字背后 都需要强大的技术支撑 Higher, Faster, Smarter 是我们不变的追求 技术无边...

阿里云云栖社区
22分钟前
4
0
element ui中的input组件不能监听键盘事件解决

vue使用element-ui的el-input监听不了键盘事件,原因应该是element-ui自身封装了一层div在input标签外面,把原来的事件隐藏了,所以如下代码运行是无响应的: <el-input v-model="search" p...

呵呵闯
24分钟前
3
0
Linux常用中间件启动命令

zookeeper redis lts

王桥修道院副院长
25分钟前
1
0
Kotlin极简教程中对? extends 和 ? super (out和int)的描述

PECS 现在问题来了:我们什么时候用extends什么时候用super呢?《Effective Java》给出了答案: PECS: producer-extends, consumer-super 比如,一个简单的Stack API: public class Stack<E...

SuShine
26分钟前
1
0
微信分享link问题

前提:公司业务,分享的页面需要自定义并且是一个固定页面 因此自定义分享link,这里存在一个问题,必须与安全域名一致,自不必说,而且这个link必须是当有协议的,也就是说不能写成locatio...

litCabbage
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部