让你的代码量减少3倍!使用kotlin开发Android(一) 创建Kotlin工程

本文同步自博主的私人博客:wing的地方酒馆

写在前面

使用kotlin开发android已经两周多了。得到的好处太多,敲代码简直是爽的飞起。kotlin简单,易用,代码量少。这么爽的东西,不敢私藏,所以写出来与大家分享。

可能标题说减少3倍你不信,但事实上并不夸张。通过学习本系列文章,你会发现,代码。真的少了很多。

本系列文章将会使用kotlin从无到有撸一个android小应用程序(不是微信小程序= =!),而并非传统的学习语言方式(如:《21天精通kotlin》、《kotlin从入门到精通》)。在创作的过程中学习语法,我认为单纯的学语法没什么意义,学了也会忘。因为本身不是为了学而学,而是为了用而学。用得多了,也就记住了。

至于Kotlin是什么,简单的说就是跑在jvm上的新语言,他的特点就是短小 ,至于有什么好处,那就说不完啊,挑特点来说。

  1. 无缝对接java,可以java代码和kotlin代码互相调用
  2. 一键java转kotlin,如果你有遗留的java代码,可以一键转换
  3. 函数扩展功能,再也不知道啥叫继承

创建第一个kotlin应用!

  1. 首先打开你的AS,像往常一样,创建一个Android应用。

  2. 然后在Setting里找到Plugin选项,搜索kotlin插件。从官方仓库下载安卓即可。

  3. 在app的gradle下加入如下代码

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'
  1. 在project的gradle下加入如下代码(注意你自己配置的时候,改成最新版本)
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.4"
  1. 接下来切换到MainActivity 同时按下cmd + alt + shift + k (mac下),即可把java代码转换成kotlin代码。

分析转换的代码

public class MainActivity extends AppCompatActivity {

  @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

转换后


class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}

将两断代码做一个比较,可以看到的语法变化有:

  1. extends 变成了 :
  2. 函数定义关键字变为了fun
  3. 分号不见了
  4. 变量名称写在了类型前面

这些是语法的变化,到后面还会有一些,用得多了,也就记住了。后面再遇到语法变化还会继续总结。

将Hello World编为Hello Kotlin

首先给xml文件里的textView加一个id

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
/>

在以往的java代码中,想要改变textview的文本,需要先findviewbyid()之后再setText(),控件多了就很臃肿。是时候试试kotlin了!

下面用kotlin实现同样的功能,代码如下:


textView.text = "hello kotlin"

纳尼????就一句话??? 卧槽??? 什么鬼????

额。。你冷静一下,我知道你内心很卧槽。但确实是这样,如你看到的,findviewbyid不见了,取而代之的是直接写id。kotlin可以直接根据id找到控件,而避免findviewbyid,这时候你需要注意一下import头,导入这个东西才可以


import kotlinx.android.synthetic.main.activity_main.*

另外,setText也不见了。这是kotlin的一个特性,所有getter和setter可以省略,直接变为 .text

感觉如何?代码量是不是减少了许多,实际上这只是凤毛麟角而已啦。

本文这就结束了(嫌文字太短?不要急啦,你先去动手创建个工程咯。。系列文章,既然挖了坑,就不会拖更的(吧..))

本项目使用的代码地址

如果你是Android开发者,那么你还可以来 wing的酒馆: 425983695 来分享你的开发经验哦

让你的代码量减少3倍!使用kotlin开发Android(一)的更多相关文章

  1. 让你的代码量减少3倍!使用kotlin开发Android(二) --秘笈!扩展函数

    本文承接上一篇文章:让你的代码量减少3倍!使用kotlin开发Android(一) 创建Kotlin工程 本文同步自博主的私人博客wing的地方酒馆 上一节说到,kotlin可以省去getter,se ...

  2. 让你的代码量减少3倍!使用kotlin开发Android(四) kotlin bean背后的秘密

    上一篇我们介绍了缩短五倍的java bean,不知道你在看的时候有没有一种疑问捏? 本文同步自博主的私人博客wing的地方酒馆 再来回顾一下,两种代码的对比 public class User { p ...

  3. 让你的代码量减少3倍!使用kotlin开发Android(三) 缩短五倍的Java Bean

    回顾一下 哈,没想到你已经坚持不懈看到第三篇了,不错哈~坚持就是胜利. 本文同步自博主的私人博客wing的地方酒馆 在上一篇文章中,我们介绍了扩展函数,这里对上一篇进行一点小小的补充. 还记得text ...

  4. 让你的代码减少三倍!使用kotlin开发Android(五) 监听器

    本文同步自 博主的私人博客wing的地方酒馆 在前面的博客中,有一个栗子,是点击按钮转跳的监听器. button.setOnClickListener { val user = User(" ...

  5. 让你的代码量减少3倍!使用kotlin开发Android

    (一) 创建Kotlin工程 (二) –秘笈!扩展函数 (三) 缩短五倍的Java Bean 本项目使用的代码地址

  6. Guava中这些Map的骚操作,让我的代码量减少了50%

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合.缓存.并发.I/O等多个方面.使用这些API一方面 ...

  7. 前端程序员的蜕变——JS的 event 对象属性、使用实例、兼容性处理(极大提高代码效率、减少代码量)

    下面讨论一下 js 中的 Event 对象,主要从以下三个方面详细的描述(点击标题可跳转到对应部分): 1.什么是event 2.怎么用event,用他该注意什么,几个简单实际应用 3.event在不 ...

  8. WPF INotifyPropertyChanged 通过特性减少代码量

    在很多地方需要用上INotifyPropertyChanged的接口,MVVM模式,List等集合都会用到. 通常我们使用 protected void OnChange(PropertyChange ...

  9. 想减少代码量,快设置一个有感知的 Aware Spring Bean

    摘要:正常情况下,Spring 中的 Bean 对 Spring 是无感知的,Spring 框架提供了这种扩展能力,能让一个 bean 成为有感知的. 本文分享自华为云社区<有感知的 Aware ...

随机推荐

  1. 完成 bass 库的频谱显示效果图

    效果如图所示,比 bass 官方自带的例子效果要好那么一点点(峰值有滞留)...

  2. MySQL中的查询子句

    查询语句 字句名称 使用目的 select 确定结果集中应该包含那些列 from 指明所要提取数据的表,以及这些表是如何连接的 where 过滤不需要的数据 group by 用于对具有想用列值的行进 ...

  3. SpringMVC的流程分析(二)—— HandlerMapping组件

    1.HandlerMapping的类结构 如上图所示,HandlerMapping接口有一个叫做:getHandler()的方法,这个方法是用来回去HandlerMapping对应的处理器的,由此也就 ...

  4. Java面试题—初级(5)

    41.a.hashCode() 有什么用?与 a.equals(b) 有什么关系? hashCode() 方法对应对象整型的 hash 值.它常用于基于 hash 的集合类,如 Hashtable.H ...

  5. 物联网 MQTT 服务质量级别

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 翻译人:Tnecesoc,该成员来自云+社区翻译社 消息队列遥测传输(MQTT)是一种客户端服务器发布 / 订阅消息传输协议.它轻量,开放, ...

  6. angularjs1.x版本,父子组件之间的双向绑定

    今天遇到了一个angularjs的坑, ng-repeat和ng-if会改变他所包含的html中绑定变量的作用域. angularjs自定义指令,可以定义四种变量,通过 =,@,&双向绑定,单 ...

  7. [ZJOI2007]报表统计

    题目描述 Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细观察,小Q发现统计一张报表实际上是维护一个非负整数数列,并 ...

  8. 51nod 1364 最大字典序排列(线段树)

    1364 最大字典序排列基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出一个1至N的排列,允许你做不超过K次操作,每次操作可以将相邻的两个数交换,问能够得到的字 ...

  9. hdu 5002 (动态树lct)

    Tree Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  10. Codeforces 666E Forensic Examination

    题意:给定主串s和m个模式串,每次询问[l,r]的模式串中出现s[pl...pr]次数最多的串和次数. 这题挺简单的,先把所有模式串拿来建广义后缀自动机,询问相当于子树众数,用线段树合并即可. 那我为 ...