Kotlin基础教程之数据类型
kotlin基础教程之数据类型
一切都是对象.
在kotlin中一切都是对象.kotlin有一些基本类型boolean,byte,shot,int,long,float,double
在kotlin中没有原始类型,以上这些类型都是对象,比如
运行结果如下
kotlin支持16进制字面值,二进制字面值和科学记数法,官方文档中没有提到8进制
所有基本的几个数据类型不会进行显式类型转换,这一点尤为重要!那么如何进行转换呢?如下:
可以使用tolong,toint,toshort,tochar等函数进行转换,不仅如此,数组array<>也是对象,不但可以通过aslist函数转换为list对象,数组类甚至包含了一个用于计算平均值的average函数.实际上kotlin数组真的很像collection(虽然array并没有实现collection接口).数组类还有其他很多函数,现在初学kotlin还并不清楚用途.kotlin毕竟太新,能找到的教程几乎只有一本英文的官方文档.(如果我能学完的话那么我的这些blog或许也能成为教程.)
我们还看到了一些有趣的东西,比如在字符串中使用${}进行替换,字符串中的代码会被执行,最后的结果被插入到字符串中,这一点简直和unix shell脚本里面的替换语法如出一辙,想来kotlin也是受到了很多语言的启发.
这段代码运行结果如下
关于数组的初始化,也很有趣,如下:
前面已经说过了arrayof()函数可以创建一个数组,kotlin自动判断类型,比如x就是array<string>类型,那么y是什么类型呢?
y最后会变成array<comparable<out any?>>类型,comparable是一个表示"可比较"含义的接口,any代表任何类型,问号代表可以为null,虽然暂时看不懂,不过这并不影响.
除了arrayof函数,还有intarrayof,longarrayof,doublearrayof等等函数
除此之外,array有自己的构造函数,第一个参数是数组元素个数,第二个参数是一个lambda表达式或者说一个函数或者说一个迭代器(某种意义上可以看作一样东西),在kotlin中一定程度上实现了统一.
lambda或者说迭代器在kotlin中使用非常普遍,相信大家已经深有体会 :-) 经常看到默认的那个it(笑)
运行结果不出所料,如下
iterator从0开始哦!
i.plus(i) 等同于i+i,plus就是加法函数.kotlin就是通过将操作符与函数进行绑定实现了操作符重载的功能(这个以后再看)
除了基本类型,数组类型,还有其他的类之外,kotlin还有很多有趣的类型(当然他们都是对象),比如range就是kotlin中的一种极其有趣的类型,如下:
range,顾名思义,就是一个范围,这个函数第一句代码定义x为intrange类型(当然也存在doublerange,longrange等),
根据1.rangeto(5)我们可以猜测x就代表1到5这样一个范围,那么这样的范围有什么用呢?
很明显可以用在循环中(不是所有的range都可以用在循环中,要想在循环中使用range,必须实现iterator)
从for(a:int in x) print("$a\t")一句我们可以看出,range实际上可以用来限制循环控制变量的范围
这段代码输出如下
当然对于kotlin这样追求简洁到极致的语言,使用val x:intrange = 1.rangeto(5)实在是太麻烦了,
你可以直接使用var y = 1..5 达到相同的效果,不仅如此,在for循环中a:int 也可以简化为a
编译器可以自动判断数据类型,其实在前面的代码中所有的数据类型声明都可以省略,就像这样
大多数变量的类型,编译器会自动判断,我之所以把类型写出来是为了让诸位更容易看清楚代码.
如果你仔细发现的话,在kotlin中还有很多简化代码的方法,尽量少敲键盘是这个语言很大的特点.
另外,这是我们第一次看到控制流(for循环),控制流的东西我打算留到后面,毕竟kotlin的基本语法特性是在太多了(当然也是考虑到在控制流之前应该先了解操作符,毕竟kotlin可是支持操作符重载的(笑)).
另外:在kotlin中unit类型相当于java中的void,unit有时也可以省略.