写在前面
本文中可能函数和方法这两个词会经常换着用,这两个是指的同一个东西
函数:function,c,c++里面叫函数
方法:method, java里面叫方法
1、前言
简单介绍下今天的主角-kotlin,由JetBrains公司开发设计的一门编程语言,于2016年发布了1.0正式版,而2017年Google立即宣布kotlin为安卓开发的首选语言,而这其中是否有PY交易留给读者自己去想象了。
另外提一嘴,编程语言大致分为编译型和解释型,编译型就是把源码一次性编译成二进制文件,然后交给计算机再执行,比如C和C++都属于编译型,而解释型语言简单来说就是带一个解释器,在程序运行时一边读取我们的源码,一边把源码翻译成二进制文件给计算机执行,比如Java。
举个不恰当的比喻就是编译型语言是个饱汉子,会等饭做好后再吃,解释型语言就是饿了几天的流浪汉,饭还在做的时候就开吃。所以从原理上来说,编译型语言在运行时的效率会高一些,毕竟不用实时翻译。
2、Kotlin的优点与缺点
在说优缺点之前,先说下安卓开发们的老朋友java语言,学过安卓开发的打工仔都知道,安卓系统里面的ART(Android Runtime)虚拟机就是一种改进后的移动版虚拟机,而虚拟机的作用之一就是把JAVA源码编译后生成的class文件翻译成计算机能读懂的二进制文件,所以Kotlin如果能作为安卓开发的语言的话,那么必然编译后生成的也是和java一样的class文件,因为必须符合安卓系统的运行机制嘛。所以了解以上一点后,我们就知道kotlin和java其实殊途同归。
kotlin的优点:
- 语法更加简洁,更符合高级语言的定义,同样的功能使用kotlin后代码量可减少50%甚至更多,拒绝罗里吧嗦
- 语言安全性更高,比如kotlin是“天生拒绝空指针”圣体,自带杜绝空指针的特性,极大减少了打工仔们写的崩溃率最高的空指针bug的数量
- 支持函数式编程,比如高阶函数,可将一个函数作为另一个函数的参数
- 100%兼容java
- 自带类型推断,无需显示定义数据类型,可以自动推理出当前变量的数据类型,真相只有一个,kotlin就是福尔摩斯
kotlin的缺点:
一旦沾染上后就回不去了,对不起,java,我已经是kotlin的形状了~
3、初次邂逅Kotlin
3.1 变量与函数的定义
3.1.1变量
变量的定义与java有很大不同,前面说过kotlin自带类型推断,会在赋值的时候推理出变量的数据类型,所以我们定义变量的时候可以不用显示地写出数据类型。
val与var
val:表示该变量定义后只能赋值一次,类似java中的final
var: 表示该变量可多次赋值
PS:一个小技巧,优先使用val定义变量,当不满足需求时再用var,这样我们写出的程序更健壮和稳定。
当然,自动推断机制不是总能推理成功的,比如我们延迟给这个变量赋值,所以这时候我们需要显式写出数据类型,和java将数据类型写在前面不一样,数据类型写在变量后面
3.1.2 函数
函数定义的模版如下:fun是函数定义的关键字
语法糖1:
这里说下函数相关的第一个语法糖:当函数里只有一行代码时,可以不用写大括号,直接将这行代码用=连接写在函数定义的尾部即可。
所以上面两数相加的栗子可以简写为
函数参数的默认值设置与函数传参
参数的默认值直接使用等号赋值即可(PS:在主构造函数里面设置参数默认值可以有效减少次级构造函数的使用)
函数传参,kotlin里面函数传参可以使用键值对来传参,比如上面的add函数传参,如下
3.2 逻辑控制
3.2.1 条件语句之if语句
if语句与Java的几乎一样,按之前一样使用即可。
语法糖2:if语句自带返回值,可以返回每个条件下最后一行代码的值
还是以比较两数大小为例,下图1是java习惯的写法,图2是kotlin的写法,我们再把图2简化下,不要bigger这个变量,直接返回If语句的值,这样就变成了图3;还记得上面说的函数定义的语法糖吗,当函数只有一行代码时,直接用=写在函数定义的尾部,所以就简化成了图4
Ps:你可能疑惑图4明明是四行代码,虽然是四行,但是其实if的每个条件下都只有一行代码,所以可以理解为等效一行。
图1 图2