上一章熟悉了kotlin基本的变量和函数声明,并明白了如何调用函数。本章再来看一些其他有用的东西

包括:

  1. kotlin代码组织结构

  2. when语法

  3. 循环迭代语法

  4. try表达式

1. 代码组织结构

和JAVA一样,kotlin也可以使用"包"来组织代码文件,和JAVA的语法一样,使用package定义包,使用import导入包

但是也有许多不同,例如JAVA中通常包名就对应了类文件的存放路径,比如package cn.java.ch1下有一个User类,那么

对应的Java源文件名应该叫User,位于cn/java/ch1这个文件夹下。但是kotlin没有这个要求,文件名你可以随便起。

文件也可以随便放,文件内想定义几个类,或者是没有类,直接定义顶级函数,都随你。基本没有任何限制

同一个包下的定义的函数,属性等可以直接在其他文件中使用,不同包的如果需要引用,则需要使用import语句,语法和JAVA一样

通过一个例子来看一下:

package action.kotlin.ch2

import java.util.*

/**
* Created by user on 2017/10/9.
*/
class Rectangle(val height: Int, val width: Int) {
val isSquare: Boolean
get() = height == width
} fun createRandomRectangle(): Rectangle {
//使用Java的Random类,需要导包
val random = Random()
return Rectangle(random.nextInt(), random.nextInt())
} fun main(args: Array<String>) {
val rectangle = createRandomRectangle()
val square = rectangle.isSquare
println(square)
}

上边的代码中,函数createRandomRectangle使用了Random类,需要导入java.util包

在另外一个包下新建文件,内容如下:

package action.kotlin.ch2.example

import action.kotlin.ch2.Rectangle

/**
* Created by user on 2017/10/9.
*/
fun main(args: Array<String>) {
val rectangle = Rectangle(20, 20)
println(rectangle.isSquare)
}

这个文件和上边的文件不在同一个包,因此用到另一个包中的类时,需要使用import语句进行导入。同样可以导入另一个文件的顶级函数

用法和JAVA基本是一致的。

2. when语法和枚举

首先建个文件,声明一个枚举类型,来说明when语法的使用

enum class Color(val r: Int, val g: Int, val b: Int) {
RED(255, 0, 0), ORANGE(255, 165, 0),
YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255),
INDIGO(75, 0, 130), VIOLET(238, 130, 238);
//fun rgb() = (r * 256 + g) * 256 + b
} fun getMnemonic(color: Color) =
when (color) {
Color.RED -> "Richard"
Color.ORANGE -> "Of"
Color.YELLOW -> "York"
Color.GREEN -> "Gave"
Color.BLUE -> "Battle"
Color.INDIGO -> "In"
Color.VIOLET -> "Vain"
} fun main(args: Array<String>) {
val color = getMnemonic(Color.BLUE)
println(color)
}

enum是关键字,声明枚举类型使用的。类名后边的括号中是构造参数,先明白那个是构造就够了,后续的文章中关于类的学习部分会详细说的

这里的意思就是声明了一些枚举值,并使用构造函数中的参数来赋值枚举项

getMnemonic函数,需要一个Color类型的枚举值,根据枚举值不同返回不同的字符串给调用方

main函数调用getMnemonic函数,传递Color.BLUE,函数会返回对应的Battle,这里主要看when的语法结构

when后的括号中是你要判断的参数,when的大括号体内就是一个个的分支判断了。所以不用when,我们也可以使用if判断来代替。

至于箭头语法,相信用过JDK8的应该不陌生,就是所谓的lambada表达式了。整个语法和JAVA中的switch case很像,但是明显的区别就是when语法不需要break

如果现在我想让参数为Color.BLUE和或者Color.GREEN时,返回一样的字符串,该如何做?很简单

Color.GREEN, Color.BLUE -> "Gave"
改成这样即可,多个判断分支使用逗号隔开,就是这么简单

去掉枚举的类名前缀,直接使用枚举常量:

如果不想带Color前缀,也简单,首先导入枚举类。导入语句如下:

import action.kotlin.ch2.enumtest.Color.*

然后when的判断中直接写:

GREEN, BLUE -> "Gave"

无需再带Color前缀了。

关于when的分支判断,还有一些组合使用方式,这里不多说了,以后用到会介绍

3. 迭代循环:

kotlin支持while和do while循环,这两种形式的循环迭代和JAVA中的写法没有区别,参考JAVA的即可

3.1 范围操作符

kotlin中有一个名为范围操作符的东西。写作:.. 两个点,例如我想声明一个变量,这个变量包含数字1到10,可以如下声明:

val oneToTen = 1 .. 10

接着可以使用for,while等循环语句来迭代访问,以for循环为例:

for(i in oneToTen) println(i)

上边for循环就是kotlin中for循环的语法,使用 for(var in collections)的语法来进行for迭代

3.2 downTo语法:

kotlin提供了downTo关键字用来反向迭代,例子:

for(i in 100 downTo 1 step 1) print("$i ")

反向迭代一百次,每次输出迭代的值,downTo指定从100迭代到的下限值,step指定了迭代的步阶

4. kotlin中的异常:

4.1 抛出异常:

fun main(args: Array<String>) {
test(500)
}
fun test(percentage: Int) {
if (percentage !in 0..100) {
throw IllegalArgumentException(
"A percentage value must be between 0 and 100: $percentage")
}
}

上述代码的test函数检测参数是否在0-100之间,如果不是抛出异常,可以直接使用java中的异常类。语言和java也没什么不同

4.2 try catch finally

fun main(args: Array<String>) {
val res = caculate(7, 0)
println(res)
}
fun caculate(one: Int, two: Int): Int {
var result: Int = 0
try {
result = one / two
} catch (e: ArithmeticException) {
println("Can't be divided by Zero. $e")
}finally {
//do something
}
return result
}

这个例子函数计算两个数相除,除0引发异常,捕获并作相应处理,和JAVA中也并没有什么不同,唯一的区别就是e: Exception

这里遵循kotlin声明变量的语法:变量名: 类型

kotlin学习三:初步认识kotlin(第二篇)的更多相关文章

  1. 初步了解JVM第二篇

    在一篇<初步了解JVM第一篇>中,我们已经了解了: 类加载器:负责加载*.class文件,将字节码内容加载到内存中.其中类加载器的类型有如下: 启动类加载器(Bootstrap) 扩展类加 ...

  2. Django(三)框架之第二篇

    https://www.cnblogs.com/haiyan123/p/7717788.html 一.知识点回顾 1.MTV模型 model:模型,和数据库相关的 template:模板,存放html ...

  3. angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)

    您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点 ...

  4. Kotlin学习第一课:从对比Java开始

    1. 介绍 今年初,甲骨文再次对谷歌所谓的安卓侵权使用Java提起诉讼,要求后者赔偿高达90亿美元.随后便传出谷歌因此计划将主力语言切换到苹果主导的Swift,不过这事后来没了跟进. 但谷歌在这两天的 ...

  5. 浅谈Kotlin(三):类

    浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 前言: 已经学习了前 ...

  6. kotlin学习笔记-异常好玩的list集合总结

    不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 fun testList(){ var StringVal = "12_12_13_15_a_b_c_d_yu_ ...

  7. 000 初步使用Kotlin开发Android应用

    Kotlin是Jetbrians公司开发的一款编程语言,基于jvm兼容Java. 要求 IDE:IDEA或者Android Studio(简称studio)对Kotlin语言有所了解,官方文档:htt ...

  8. RabbitMQ学习总结 第二篇:快速入门HelloWorld

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  9. 学习KnockOut第二篇之Counter

                                                                        学习KnockOut第二篇之Counter        欲看此 ...

随机推荐

  1. 【javascript基础】JS计算字符串所占字节数

    废话不说,直接正题吧. 最近项目有个需求要用js计算一串字符串写入到localStorage里所占的内存,众所周知的,js是使用Unicode编码的.而Unicode的实现有N种,其中用的最多的就是U ...

  2. 【css】25个漂亮的响应式布局的web设计【转】

    响应的web设计的做法是提高用户的浏览质量,并在不同设备上能够完美的浏览使用,就像大前端推出的D7主题.看看下面美丽的响应的网站布局,通过本文你会在以后的设计中找到响应的web设计的灵感. 1.Mar ...

  3. Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory 解决办法

    当你使用的Gradle版本是2.4以上,Android插件版本是1.3.0以上的时候就会出现这个问题,这时候你只需将android-maven-gradle-plugin插件版本改为classpath ...

  4. 定位CPU高问题三把斧

    1.top -H -p PID 查看对应进程的哪个线程占用CPU过高 2.printf "%x\n" tid   将需要的线程ID转换为16进制格式 3.jstack pid &g ...

  5. CSS字幕滚动 !!!

    marquee的基本语法:<marquee> … </marquee>,与大多数HTML语法元素一样,它也是成双出现的,被修饰对象就放在起始符和终止符之间.而且它自己可以实现鼠 ...

  6. HTML, CSS. JS的各种奇葩bug

    1. block包含inline-block的时候, inline-block 没有内容的时候,会根据 font 产生一个 line-height 来产生一个空白块. 解决方法: <div cl ...

  7. vs 添加第三方库lib的两种方法

    方法一1.代码: 方法二2.配置: 首先包含头文件 #include “../DuiLib/UIlib.h” 连接器->常规-->附加库目录.即是将lib所在的目录,千万要记得,还要写一处 ...

  8. (转)MapReduce Design Patterns(chapter 4 (part 2))(八)

    Binning Pattern Description 分箱模式,跟前面的类似,分类记录且不考虑记录的顺序. Intent 归档数据集中的每条记录到一个或多个类别. Motivation 分箱和分区很 ...

  9. SpringMVC札集(08)——文件上传

    自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...

  10. CUDA Samples: Streams' usage

    以下CUDA sample是分别用C++和CUDA实现的流的使用code,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第十章,各个文件内容如 ...