上一篇文章介绍了如何搭建Kotlin的开发环境,可是这个开发环境依然基于Android Studio,而在Android Studio上使用Java进行编码,本来就是理所应当的,何必还要专门弄个Kotlin,这个Kotlin相比Java到底有哪些好处呢?

我们可以把Kotlin看作是Java的升级版,它不但完全兼容Java,而且极大精简了代码语法,从而使开发者专注于业务逻辑的编码,无需在繁琐的代码框架之间周旋。当然,若想充分运用Kotlin的优异特性,除了导入Kotlin的核心库,还得导入Kotlin的扩展库与Anko库。具体到编译配置文件,则要进行以下两处修改:
1、打开项目的build.gradle,补充添加anko的版本号声明,以及Kotlin扩展库的路径,完整的编译配置如下所示:

buildscript {ext.kotlin_version = "1.1.2"ext.anko_version = "0.9"repositories {jcenter()}dependencies {classpath 'com.android.tools.build:gradle:2.3.0'classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"}
}

2、打开模块的build.gradle,在文件开头补充添加Kotlin的扩展插件,配置添加如下:

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

接着在dependencies节点下补充添加anko插件的编译说明,如下所示:

    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"compile "org.jetbrains.anko:anko-common:$anko_version"

编译配置修改完毕,接下来我们尝试进行简单的Kotlin编码,看看Kotlin的代码究竟有多么的简练。

首先在之前的hello模块包名上右击,依次选择弹出菜单“New”——“Kotlin Activity”(也可直接依次选择顶部菜单“File”——“New”——“Kotlin Activity”),右键菜单的截图如下所示:

选择菜单后打开Kotlin的Activity创建页面,单击“Next”按钮进入创建信息的填写页面,如下图所示:

这里填上Activity的名称EasyActivity,对应的布局文件名则为activity_easy,最后单击“Finish”按钮完成EasyActivity.kt的创建。

现在给前面创建的布局文件activity_easy.xml添加几个TextView和Button控件,布局比较简单就不贴了。因为本文主要介绍Kotlin开发,不再对Adnroid的Java开发做详细介绍,所以读者如果对Android开发还不熟悉的话,建议先根据《 Android Studio开发实战:从零基础到App上线》一书学习基本的Android开发。

接下来是本文的重点,以前我们操纵控件之时,都要先通过findViewById方法获得控件对象,然后再调用相关函数设置对象属性。比如现在有个名为tv_hello的TextView控件,准备在代码中把tv_hello的显示文本改为“你好呀”,这用Java编码的话即是下面两行代码:

    TextView tv_hello = (TextView) findViewById(R.id.tv_hello);tv_hello.setText("你好呀");

修改文本这个功能,如果用Kotlin实现会是怎么样呢?下面就让我们实验一下。首先在EasyActivity.kt代码开头补充下面一行:

import kotlinx.android.synthetic.main.activity_easy.*

这行导入语句的目的是引进Kotlin的控件变量自动映射功能,接下来的代码就无需再调用findViewById方法,直接把控件ID当作控件对象使用即可。比如修改TextView的显示文本,采用Kotlin编码只要下面一行:

    tv_hello.setText("你好呀")

如此一来,原来的两行代码精简到一行代码,去掉了原先获取控件对象的冗余代码。然而Kotlin的便利性并不仅仅限于此,它对控件甚至都无需调用set***/get***方法,而允许直接修改/获取控件的属性值,像设置文本这个功能,可以继续简化为下面这行代码:

    tv_hello.text = "你好呀"

进一步简化之后,原代码的“set”与两个括号都被去除,但是新代码反而更容易理解了。

也许有人说,Kotlin在这里只精简了一行代码,不见得比Java有多大优势,那就继续进行其它常见功能的PK,有道是五局三胜,赢得多才足以服众。上面的第一局为修改控件文本的PK,结果是Kotlin小胜;接下来依次再设四局PK,其中第二局为点击监听器的处理。Button是Android的常用按钮控件,代码中经常要处理Button控件的点击事件,下面的Java代码就是响应Button点击的一个例子:

    final Button btn_click = (Button) findViewById(R.id.btn_click);btn_click.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {btn_click.setText("您点了一下下");}});

其实这个响应功能很简单,仅仅在点击按钮之时修改按钮文本而已,可是因为Java需要实现点击监听器,所以无奈还得写好几行的匿名类代码。如果使用Kotlin实现相同的功能,又是怎样的呢?且看下面的Kotlin代码:

    btn_click.setOnClickListener { btn_click.text="您点了一下下" }

不得了了,Kotlin只需一行代码就完事,想不到吧,此局Kotlin完胜。

第三局换个Button控件的长按事件,下面的Java代码是响应Button长按的一个例子:

    final Button btn_click_long = (Button) findViewById(R.id.btn_click_long);btn_click_long.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {btn_click_long.setText("您长按了一小会");return true;}});

可以看到Java代码依旧冗长,再看看Kotlin代码如何接招:

    btn_click_long.setOnLongClickListener { btn_click_long.text="您长按了一小会"; true }

Kotlin仍旧一行代码搞定,真是叫人刮目相看,此局Kotlin依然完胜。

第四局咱不比监听器了,Java在匿名类这块很吃亏,那来比另一种常用的Toast提示功能,该功能的Java代码只有一行:

    final Button btn_toast = (Button) findViewById(R.id.btn_toast);btn_toast.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(EasyJavaActivity.this, "小提示:您点了一下下", Toast.LENGTH_SHORT).show();}});

上面外层的点击监听器请忽略,正宗的Toast代码真的只有一行,且看Kotlin怎么拆招:

    btn_toast.setOnClickListener { toast("小提示:您点了一下下") }

哈哈,Kotlin连同监听器的代码,比Java的一行Toast代码都要少,此局Kotlin继续小胜。

可是为啥Kotlin的toast函数不区分显示时长呢?原来toast方法默认为短时显示,即Toast.LENGTH_SHORT。这下Java方窃喜,虽然我的代码比较长,但是足够灵活呀,想要短一点就LENGTH_SHORT,想要长一点就LENGTH_LONG。正好第五局比试Toast的长时提示,该功能的Java代码也只有一行:

    final Button btn_toast_long = (Button) findViewById(R.id.btn_toast_long);btn_toast_long.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {Toast.makeText(EasyJavaActivity.this, "长提示:您长按了一小会", Toast.LENGTH_LONG).show();return true;}});

现在Kotlin没法调用toast函数了吧,Java洋洋自得总算能够扳回一局,谁料Kotlin大喝一声“看我来”:

    btn_toast_long.setOnLongClickListener { longToast("长提示:您长按了一小会"); true }

真是未曾想到,Kotlin另外有个longToast招式,仅仅多了四个字母而已,于是此局Kotlin理应小胜。

五局PK下来,Kotlin大获全胜,Java溃不成军,直教人长嘘短叹“长江后浪推前浪,前浪死在沙滩上”。以上初步介绍了Kotlin的几种常见用法,从下一篇文章开始,将系统地讲解Kotlin的基本语法知识。

点此查看Kotlin入门教程的完整目录

__________________________________________________________________________
本文现已同步发布到微信公众号“老欧说安卓”,打开微信扫一扫下面的二维码,或者直接搜索公众号“老欧说安卓”添加关注,更快更方便地阅读技术干货。

Kotlin入门(2)让App开发变得更容易相关推荐

  1. java会变得更简单吗_spring 第一篇(1-1):让java开发变得更简单(下)

    切面(aspects)应用 DI能够让你的软件组件间保持松耦合,而面向切面编程(AOP)能够让你捕获到在整个应用中可重用的组件功能.在软件系统中,AOP通常被定义为提升关注点分离的一个技术.系统由很多 ...

  2. ​儿童手表APP开发让用户更好地体验到智能设备的便捷性​

    ​儿童手表APP开发让用户更好地体验到智能设备的便捷性​. 智能手表已经不是用来看时间这么简单了,还可以结合多种功能让用户更好地体验到智能设备的便捷性.这其中还有专门针对儿童的儿童手表,儿童手表app ...

  3. ArcBlock 分享 | OCAP Playground让区块链开发变得更友好

    作者:海艳 来源:币探索 时隔半年,ArcBlock 区块基石逐步从理论走向落地,第一款应用"开放链访问协议实验台( OCAP Playground)" 已如期正式发布.一系列相关 ...

  4. LEARUN快速开发平台,让开发变得更简单

    互联网时代,程序员一直是一个令人羡慕的高薪职业.但在不久前有人发出了不一样的意见:程序员现在看似乎是一片光明,但AI和人工智能的发展很快,10年后会怎样呢?会不会程序员的工作都被AI替代了?软件编程也 ...

  5. 划重点 | 如何让App开发及运营更走心,并兼具不可复制性?

    ▲图片来自网络 自在线教育.短视频火热以来,大多公司在App开发的道路上发展得越发成熟,所遇到的问题也越来越突出,更多体现在企业定制开发App及运营层面.如何针对不同的用户群体设置不同的定位,并有效在 ...

  6. 小说阅读APP开发和漫画阅读APP开发,哪个更受欢迎

    小说一直存在大众的生活之中,从前是以qq日志的形式,现在演变成APP.公众号等形式. 而漫画也从小部分市场逐渐扩大. 小说.漫画的用户,可以是同样一群人,也可能是不同的人群,但能够肯定的是,二者相结合 ...

  7. 让iOS开发变得更有效率-分类、工具类

    转自:xiao公子的简书(@Lee枭枭) 在工作中整理的一些分类与工具类,分享给大家.这些工具类可以减少项目中的代码量,让代码变得更简洁,可以大大的提升项目的效率,直接拖到项目中使用即可. 下载地址: ...

  8. 让开发变得更简单 | 阿里云中间件推出全新开发者服务

    10月24日,阿里云中间件推出全新开发者服务,发布3款开发工具,包括Alibaba Cloud Toolkit .链路追踪Tracing Analysis和应用高可用服务AHAS,旨在帮助开发者们提高 ...

  9. 快递出入库管理APP开发 收发快递更方便

    网购的盛行让收发快递成为很多人日常生活必不可少的一个环节,对于快递公司来说,每天有那么多的快递,如果没有一个好用的管理系统的话,不仅麻烦还很容易出现纰漏,所以快递出入库管理APP软件就显得很必要了. ...

最新文章

  1. PE文件结构 - NT头学习
  2. Win32程序简单演示-模拟电子表格移动光标到另一单元格
  3. Mysql之增加数据_INSERT INTO
  4. Java学习必不可少的网站,快收藏起来!
  5. 算法高级(48)-数据挖掘十大算法简介
  6. 【Flink】Flink 任务实时监控
  7. 万万没想到,JVM内存区域的面试题也可以问的这么难?
  8. css 图片等比例缩小_12个令人惊叹的CSS实验项目
  9. 微信团队的深度学习框架deepx_core开源啦
  10. [转]ASP.NET Web API系列教程(目录)
  11. lf 前后端分离 (5) 优惠券
  12. php 制作通讯录,PHP 制作通讯录(五)
  13. mongovue mysql_mongoVUE的增删改查操作使用说明(转)
  14. Flash builder4 插件版破解
  15. 里奥·梅西(Lionel Messi)-----球场上舞动的红蓝精灵
  16. MacBook通过MacBook安装Windows系统出现“下载windows支持软件时未能储存到所选驱动器”
  17. Cisco 3550交换机IOS备份(真实设备演示)
  18. 助力老旧小区安防智能化升级
  19. 学习VM上运行dnf(整理)
  20. 微信公众号--根据用户opneId获取用户信息

热门文章

  1. Leetcode每日一题:46.permutations(全排列)
  2. c语言单片机串口通讯,单片机C语言之串口通信协议
  3. 视图可以修改表数据吗_Excel-数据透视表、数据透视图
  4. php如何让B链接在当前页面打,javascript - 如何实现点击链接 A 弹出窗口 X,点击链接 B 继续在弹出窗口 X (刷新)打开?...
  5. 服务器进bios修改启动顺序,服务器进入bios设置u盘启动
  6. 启动tomcat控制台日志出现乱码怎么办?
  7. cmd中编译、执行Java文件
  8. 第12章[12.7] Ext JS实现带动态数字的图标
  9. dev-mysql_GitHub - intergrate-dev/mysql-elasticsearch
  10. ib什么意思_科普|听说邻居的孩子去了IB学校,IB具体是什么?