Kotlin学习(二)—— 基本语法函数变量,字符串模板条件表达式,null,类型检测,for,while,when,区间,集合
2017-12-01 00:00
441 查看
作者:刘某人程序员博客:http://blog.csdn.net/qq_26787115
声明:未经原作者允许请勿转载
一.基本语法
Kotlin的很多概念跟JAVA是有类似的,所以我应该不会
像我的JAVA之旅一样那么的详细,但是不用担心,你会看的很明白的,我也是根据官方的文档来学习的
我们在IDEA中创建一个项目Kotlin02
1.函数(fun)
我们默认有一个主函数,就是main了
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6ibyZQjKtKxCy1gf0t0rnr5lFdq4HpR8tuWuevoia9XGHAA7LNWpVJ37Q/640?wx_fmt=png&wxfrom=5&wx_lazy=1)
和JAVA一样,他就是程序的主入口了,当然,我们还有普通的函数
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6o1IH8DxNdN0la5eYpwiciacajuBR88CgNCZSyibciaaKPuribzIsZwwBb5g/640?wx_fmt=png&wxfrom=5&wx_lazy=1)
这里就可以对Kotlin的函数有一个比较清晰的认识了,首先,我们的无参 无返回中有一个Unit,这个就是标志
这个函数没有返回值,和JAVA中的void是一样的,而且我们一般是可以省略掉的,并且这里要注意下的就是他的函数传值
是先定义变量,再用冒号去指向类型,如a:Int b:String,并且返回值也是用冒号去指向的,如:Int
并且我们还可以将表达式作为函数体、返回值类型⾃动推断的函数,如:
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6zr1y5kzJJn5G1tUTwWUyyCxGjl79SDNqVte1ibrEicfTG3IkjIawCjhQ/0?wx_fmt=png)
2.变量(val&var)
变量分三种,局部变量,顶层变量和可变变量
但是就两个修饰符val 和 var
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6ia1BRm4DrxFSWUqXh4hKC2zCjphVTkib0yPIHLic0CYY6p16UsrUiaCJfA/0?wx_fmt=png)
用val修饰符修饰之后,只能一次赋值后就编程只读变量了,在JAVA中可以理解为常量,这里怎么理解呢,可以说是JAVA中用final修饰一样,我们来举个例子
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago60xko2XrMdlSvwJSfRfNk9QWaUe7Cm4e9aNqHZcIYMDlTVFYrt1oicBQ/0?wx_fmt=png)
这里的意思就是我定义一个Int类型的a,然后输出a + 2,编译器会提示错误,因为val修饰后无值,不可操作,然后我给他赋值= 3,就可以正确输出了
这里还有一点要注意的就是,我们可以 val c: Int这样定义一个变量,先不赋值,但是如果你不指定值又不定义类型,比如val a,那是错误的,编译器无法得知你需要做什么操作
我们再来看下可变变量,用法是一样的,但是注意的事,他是可变的
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6UTgvhGn7Bktp20DofYNekia9cXZfUcLHnFRxR54xZjGxp9zVZFumyyA/0?wx_fmt=png)
这里就可以明白,a输入2,然后a++,输出3
还有最后一种顶层变量,顶层变量其实就是JAVA中的全局变量,这个没什么可说的
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago61HyAiaSuRClaiau5h75bw8z8AXla5YgatS0ChnOPQHiaxKDInhqZQPmpA/0?wx_fmt=png)
这个就没什么好说的了
3.字符串模板($)
字符串模板也是比较简单的,就是字符引用,我们来看一段例子
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6JdHgwSoLEnSUe4dS9pC5vib3icT6mOhsSsso30NNTNickuYfSvL1wHaibA/0?wx_fmt=png)
然后run一下,输出
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6kfHPIsexF4xRmr3XwhlnuicylV1icJ6OXicLbBT7mHzXW8cSBPxh1zoNQ/0?wx_fmt=png)
可以看出,这里我输出的时候就引用了变量boy和girl,只需要前面加上$即可,有点类似于JAVA中的转义字符
当然,还有一些更加高级的用法,比如
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6m0YwN1niaLlzPnuibvJVTYcmwIVBic2SicT7rn9Bqncicn4vXk2khk2rqfw/0?wx_fmt=png)
这里我们可以看到输出
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6S53BibpTw0IEbLhNJIJ4IrP68XRFncDn7mFnM8tq6PD1G0EcGN8LJmQ/0?wx_fmt=png)
也就是说,我们可以直接操作,当然,本质上这样转义跟下面这样并没有什么区别
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6oJ52ArZSmntmeibpw8ER7k3FV1fpJqQnTs8K3vofcBfoPfSDJjzDFLA/0?wx_fmt=png)
你觉得哪种方便呢?
4.条件表达式(if else)
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6oTdQwq1AaMVYA9L8r1sibAaWVnOCk7boOrz4q1z0cIegc3CJnDVxHcA/0?wx_fmt=png)
if else 一直都是这种写法,当然,简单判断的话,我们还可以这样去写
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6DeM2AOghcLNFYDibZejw81cFXkIc3RnaV04ErfJ2sE4E5ZK1yAXz75w/0?wx_fmt=png)
5.可空值及 null 检测(?)
还记得我们在java中怎么去写函数的嘛?比如
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6C0C3YxLAeRDJys5VRNd0MTpHfh3XLOwpktVqZZADHiaEoKMkrDFNPBw/0?wx_fmt=png)
这是一段JAVA代码,我们可以看到,如果我们通过逻辑操作后可以让y赋值,但是也同样的,有存在有可能返回null的情况,但是在kotlin中,我们需要特殊处理
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago60ibakPLu43RxoLMsep0gkKzRx40yibPVCP7TeSiaCKBTgic5sjr43feoXA/0?wx_fmt=png)
这里注意,如果返回值有可能为空的话,需要标记?问号,不然你return null会报错
6.类型检测及⾃动类型转换(is)
类型检测在JAVA中都是用instanceof来处理,在kotlin中,可以用is,我们看一个例子
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6ab8rFfc7L6MBpqj2CMm6GF3zL2bB2WfTqiatFmUHzA22zjsy3lKUoiag/0?wx_fmt=png)
在这段代码中,我说明一下,Any是所有类都有一个共同的父类,类似于Object,但是他的神通没有Object大
而在这段代码中,首先,我用is判断了String,这里可不仅是判断,而且还类型转换了,所以为true的话,就可以输出a.length了,但是在没有调用is之前,实际上是没有length这个方法的
7.for循环(for in)
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6JoFictTbsK36tzxQXtwX3ANxylSvWnWLicOSWW9kKcOTWkUOBup1m6Ug/0?wx_fmt=png)
这段代码中,我们定义了一个list为a,然后通过in去for循环,这里我要说一下,就是字符串模板的应用场景。
比如输出的结果需要换行,那么print(b + “\n”)你这样用+号是错误的,需要print(“$b \n”),在Kotlin中,in负责for循环,即最大次数为list长度
当然,如果你想问,那我想知道下标是多少怎么办?
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6aWXvsRExlAeCHib5y2DvQu6JqfMblL3VgTXKl2LzaNaruE4sN0MalUA/0?wx_fmt=png)
实际上in只是提供循环的手段而已,真正要循环的东西,还是要自己决定,所以这里,我就循环list的下标a.indices
这样我就可以拿到下标以及对应的值,也是一样的,当然,这个输出我们可以用更官方的写法来写的:
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6tiaZENuMfYEiaKDzCoGEO386xwVBfiabzxMmu0xxKOUIe6Lw0SYUrCRdA/0?wx_fmt=png)
一样,我们可以看到打印
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6T7fJWUTUX8JZicibD4XhxebEdic5Vl7N61xLJH9ia3Nf6CMY4LoSytiaw2Q/0?wx_fmt=png)
8.while循环(while)
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago62bzEOAK4M7siaAeOZLrBWY9nCuYrKc3WWibIy7ArAP61jvEMG2sb7IDQ/0?wx_fmt=png)
while循环没什么好讲的,你按照正常的来就好了
9.when表达式(when)
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6KOic4ywhCYeqrMqHn6op7JjG3fWQ3ZgEUSY6KfcVWQ93lXTayK2PpFQ/0?wx_fmt=png)
从这段代码大家可以看出一些东西来吧,没错,实际上Kotlin中的when表达式就是JAVA中的switch语句块 -> 相当于case
10.区间(range)
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6o6mVSJsDoIDTibS7VyGWbJRe07EUaCwxRUxaEjmvE80Vyog9EsjHIHQ/0?wx_fmt=png)
我们通过int可以判断x是否在1-10的区间,当然,区间的用法还是比较多的,比如数列迭代等,这些我们后面会详细讲到
11.集合
集合在我们上面for循环的时候就已经出现过
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6bXCuJgIwV2UoAQuPjCdKbCHibQXDWYFrMFTFGff5WZibB2QxZXCac7Nw/0?wx_fmt=png)
集合的用处很广泛,我们在后面还会细讲,这里举一个例子:
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6UKmiaAibWuxR077SeljFm9bSIsIMuv11sOgBxTuBhiaIslicsBcuG8OsCA/0?wx_fmt=png)
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6SKPxkbLH9tAf4erpBPW75OMKsnHKgLticMic5VrjN3296Ew8B4gsU9dA/0?wx_fmt=png)
我们先看下输出结果
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_png/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6T0QdlIoA0iaw1zytsmEds6JpTkco5NVQG9gtHhVnvuXiagCL2WetQNibA/0?wx_fmt=png)
这个题出的有点粗糙,大家看的懂就行,意思就是我们只有三种水果给到三个喜欢吃的投票员,他会给我相应的分数,最后超过5分就合格,然后我们来分析下这个题目
首先我们定义了一个集合fruit来表示我当前的水果,然后我定义fractions来进行分数的累加,开始循环并且判断谁喜欢吃,给几分,最后判断是否大于5,
题目很简单,但是我们的逻辑也是从这里开始萌发的
这些大概就是Kotlin的大致介绍了,实际上这门美丽的语言不止是这些内容,当你已经了解了这些之后,我们就可以进行下一个环节,正在的开始没一个知识点的细讲了
如果有兴趣的话,可以来Github参与一下
Kotlin: https://github.com/LiuGuiLinAndroid/Kotlin
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_jpg/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago6trGacHwULe6hcxnyq4ScJmqp3xnQSwcQkAoJtCULKXtJYbU4EJ0IPA/0?wx_fmt=jpeg)
一命二运三风水,四修阴德五读书!
![](https://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbiz_jpg/zg6EEbl7JB2ia0FLuoLPiariaCe3jNPago61YA3Vn0RAiaHyJj0YIIw32f5PA90EvSq8HJxc7ibGDUq6Dt2XXJpq4ibw/0?wx_fmt=jpeg)
刘桂林微信号 : Android_LiuGuiLin新浪微博:@刘某人程序员
声明:未经原作者允许请勿转载
一.基本语法
Kotlin的很多概念跟JAVA是有类似的,所以我应该不会
像我的JAVA之旅一样那么的详细,但是不用担心,你会看的很明白的,我也是根据官方的文档来学习的
我们在IDEA中创建一个项目Kotlin02
1.函数(fun)
我们默认有一个主函数,就是main了
和JAVA一样,他就是程序的主入口了,当然,我们还有普通的函数
这里就可以对Kotlin的函数有一个比较清晰的认识了,首先,我们的无参 无返回中有一个Unit,这个就是标志
这个函数没有返回值,和JAVA中的void是一样的,而且我们一般是可以省略掉的,并且这里要注意下的就是他的函数传值
是先定义变量,再用冒号去指向类型,如a:Int b:String,并且返回值也是用冒号去指向的,如:Int
并且我们还可以将表达式作为函数体、返回值类型⾃动推断的函数,如:
2.变量(val&var)
变量分三种,局部变量,顶层变量和可变变量
但是就两个修饰符val 和 var
用val修饰符修饰之后,只能一次赋值后就编程只读变量了,在JAVA中可以理解为常量,这里怎么理解呢,可以说是JAVA中用final修饰一样,我们来举个例子
这里的意思就是我定义一个Int类型的a,然后输出a + 2,编译器会提示错误,因为val修饰后无值,不可操作,然后我给他赋值= 3,就可以正确输出了
这里还有一点要注意的就是,我们可以 val c: Int这样定义一个变量,先不赋值,但是如果你不指定值又不定义类型,比如val a,那是错误的,编译器无法得知你需要做什么操作
我们再来看下可变变量,用法是一样的,但是注意的事,他是可变的
这里就可以明白,a输入2,然后a++,输出3
还有最后一种顶层变量,顶层变量其实就是JAVA中的全局变量,这个没什么可说的
这个就没什么好说的了
3.字符串模板($)
字符串模板也是比较简单的,就是字符引用,我们来看一段例子
然后run一下,输出
可以看出,这里我输出的时候就引用了变量boy和girl,只需要前面加上$即可,有点类似于JAVA中的转义字符
当然,还有一些更加高级的用法,比如
这里我们可以看到输出
也就是说,我们可以直接操作,当然,本质上这样转义跟下面这样并没有什么区别
你觉得哪种方便呢?
4.条件表达式(if else)
if else 一直都是这种写法,当然,简单判断的话,我们还可以这样去写
5.可空值及 null 检测(?)
还记得我们在java中怎么去写函数的嘛?比如
这是一段JAVA代码,我们可以看到,如果我们通过逻辑操作后可以让y赋值,但是也同样的,有存在有可能返回null的情况,但是在kotlin中,我们需要特殊处理
这里注意,如果返回值有可能为空的话,需要标记?问号,不然你return null会报错
6.类型检测及⾃动类型转换(is)
类型检测在JAVA中都是用instanceof来处理,在kotlin中,可以用is,我们看一个例子
在这段代码中,我说明一下,Any是所有类都有一个共同的父类,类似于Object,但是他的神通没有Object大
而在这段代码中,首先,我用is判断了String,这里可不仅是判断,而且还类型转换了,所以为true的话,就可以输出a.length了,但是在没有调用is之前,实际上是没有length这个方法的
7.for循环(for in)
这段代码中,我们定义了一个list为a,然后通过in去for循环,这里我要说一下,就是字符串模板的应用场景。
比如输出的结果需要换行,那么print(b + “\n”)你这样用+号是错误的,需要print(“$b \n”),在Kotlin中,in负责for循环,即最大次数为list长度
当然,如果你想问,那我想知道下标是多少怎么办?
实际上in只是提供循环的手段而已,真正要循环的东西,还是要自己决定,所以这里,我就循环list的下标a.indices
这样我就可以拿到下标以及对应的值,也是一样的,当然,这个输出我们可以用更官方的写法来写的:
一样,我们可以看到打印
8.while循环(while)
while循环没什么好讲的,你按照正常的来就好了
9.when表达式(when)
从这段代码大家可以看出一些东西来吧,没错,实际上Kotlin中的when表达式就是JAVA中的switch语句块 -> 相当于case
10.区间(range)
我们通过int可以判断x是否在1-10的区间,当然,区间的用法还是比较多的,比如数列迭代等,这些我们后面会详细讲到
11.集合
集合在我们上面for循环的时候就已经出现过
集合的用处很广泛,我们在后面还会细讲,这里举一个例子:
我们先看下输出结果
这个题出的有点粗糙,大家看的懂就行,意思就是我们只有三种水果给到三个喜欢吃的投票员,他会给我相应的分数,最后超过5分就合格,然后我们来分析下这个题目
首先我们定义了一个集合fruit来表示我当前的水果,然后我定义fractions来进行分数的累加,开始循环并且判断谁喜欢吃,给几分,最后判断是否大于5,
题目很简单,但是我们的逻辑也是从这里开始萌发的
这些大概就是Kotlin的大致介绍了,实际上这门美丽的语言不止是这些内容,当你已经了解了这些之后,我们就可以进行下一个环节,正在的开始没一个知识点的细讲了
如果有兴趣的话,可以来Github参与一下
Kotlin: https://github.com/LiuGuiLinAndroid/Kotlin
一命二运三风水,四修阴德五读书!
刘桂林微信号 : Android_LiuGuiLin新浪微博:@刘某人程序员
相关文章推荐
- Kotlin学习(二)—— 基本语法,函数,变量,字符串模板,条件表达式,null,类型检测,for,while,when,区间,集合
- Kotlin学习(三)—— 基本类型,包,控制流:if、when、for、while,Break和continue
- Kotlin学习(三)—— 基本类型,包,控制流:if、when、for、while,Break和continue
- 学习kotlin第14天_区间、类型检查与转换、this表达式、相等性
- 分享下学习Kotlin的历程-开始写逻辑吧 if/for/while/when
- Python基础,基本类型(整型,浮点数等)数据结构(List,dic(Map),Set,Tuple),控制语句(if,for,while,continue or break):来自学习资料
- Python3学习笔记【基础3--list,tuple,if条件判断,for/while循环,dict字典,set集合】
- Python3学习(一)-基础、数据类型、变量、字符串和编码、list&tuple、if、for、while、dict、set、函数与参数
- 基本数据类型与表达式3 - 零基础入门学习Delphi04
- [JNI]学习笔记系列:二 基本数据类型,字符串,数据
- Java学习笔记:基本类型、字符串及控制台输入输出
- Objective-C 的基本数据类型、数字、字符串和集合等介绍
- 基本数据类型与表达式2 - 零基础入门学习Delphi03
- 【JAVA学习】java基本数据类型与字符串之间的转换(基本数据类型、对象封装类、自动装箱、自动拆箱)
- JAVA基础学习之String、StringBuffer、StringBuilder、基本数据类型的使用、整形进制转换、集合Collection、Vector、ArrayList、LinkedList、HashSet、TreeSet等(3)
- [bxd学习java基本点]1.基本数据类型与字符串型转换与其他类型转成字符串
- Objective-C 的基本数据类型、数字、字符串和集合等介绍 (retaincount 释放问题)
- [学习与积累] CLR via C#(第三版)笔记——基本类型(字符串一)
- 基本数据类型与表达式5 - 零基础入门学习Delphi06
- 基本数据类型与表达式6 - 零基础入门学习Delphi07