文档章节

Kotlin个人理解入门篇

DannyCoder
 DannyCoder
发布于 2018/10/19 13:13
字数 1594
阅读 55
收藏 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应用程序—提高篇:Dagger-Android

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

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

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

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

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

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

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

ditclear
2017/11/18
0
0
使用Kotlin构建MVVM应用程序—第四部分:依赖注入Dagger2

目录 使用Kotlin构建MVVM应用程序—总览篇 使用Kotlin构建MVVM应用程序—第一部分:入门篇 使用Kotlin构建MVVM应用程序—第二部分:Retrofit及RxJava 使用Kotlin构建MVVM应用程序—第三部分:...

ditclear
2018/05/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在 Linux 系统查询机器最近重启时间

在你的 Linux 或类 UNIX 系统中,你是如何查询系统上次重新启动的日期和时间?怎样显示系统关机的日期和时间? last 命令不仅可以按照时间从近到远的顺序列出该会话的特定用户、终端和主机名...

来来来来来
31分钟前
0
0
Redis协议是什么样的

前言 我们用过很多redis的客户端,有没有相过自己撸一个redis客户端? 其实很简单,基于socket,监听6379端口,解析数据就可以了。 redis协议 解析数据的过程主要依赖于redis的协议了。 我们...

春哥大魔王的博客
48分钟前
2
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxCool
今天
1
0
携程Apollo统一配置中心的搭建和使用(java)

一.Apollo配置中心介绍 1、What is Apollo 1.1 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到...

morpheusWB
今天
1
0
远程获得的有趣的linux命令

使用这些工具从远程了解天气、阅读资料等。 我们即将结束为期 24 天的 Linux 命令行玩具日历。希望你有一直在看,如果没有,请回到开始,从头看过来。你会发现 Linux 终端有很多游戏、消遣和...

Linux就该这么学
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部