0. 序篇
接上篇的留的小问题。
companion object {
val TEST_FIELD_1 = "我是Kotlin中的成员常量1"
const val TEST_FIELD_2 = "我是Kotlin中的成员常量2"
}
关于以上两种定义常量的方式在转化成Java代码后是:
调用:
如果是下图:
报错!
综上结论:
-
const
修饰的常量是直接常量,何为直接常量?(直接能通过类名.常量名
)的常量。按照上图所说也就是publc static final ...
。而上图所说TEST_FIELD_1
则是间接常量,需要通过对象.getTEST_FIELD_1
-
const
只能修饰类级别的常量字段,何为类级别(就是成员常量,非方法常量也就是我们经常所说的局部常量)
1. Kotlin中新颖的流程控制
流程控制我的都知道:顺序、循环、分支。在c
,c++
,java
等编程语言中,这些流程控制几乎都是一样的。
然而Kotlin为我们的流程控制提供了许多新特性,让我们一起来看看。
一. if (条件)分支
传统用法如下:
public class JavaFile {
public static void main(String[] args) {
int m = 3;
//if ...
if (m == 1) System.out.println("m = 1");
//if ... else ...
if (m == 2) {
System.out.println("m = 1");
} else {
System.out.println("m != 1");
}
//三目运算
int b = m == 1 ? m : 3;
}
}
Kotlin中的新用法:
fun main() {
var a: Int = 3
var b: Int = 4
var d = if (a > b) a else b
var e: Int = if (a > b) {
var a1 = a + 10
a1
} else {
var b1 = b + 10
b1
}
println("a=${a}")
println("b=${b}")
println("d=${d}")
println("e=${e}")
}
运行结果:
**注意:kotlin中并不支持 三目运算
**
如果需要类似操作
var d = if (a > b) a else b
二. if 区间
在kotlin中if
的新用法不仅仅是那么简单,同时它也支持区间
判断
在之前的文章 【KtAndroid -2 】基础语法 中我已经提到过for循环区间
的使用。接下来我们来看看if区间
是如何使用的
//if区间的用法
fun main() {
var a = 10
if (a in 1 .. 10) {
println("a如果等于1~10中的任意一个数,将打印该语句。")
}
if (a in 1 until 10){
println("a如果等于1~10且不包含10(即:1~9)中的任意一个数,将打印该语句。")
}
if(a in 1 until 10 step 2){
println("a按照步进区间判断如果等于1、3、5、7、9中的任意一个数,将打印该语句。")
}
}
运行结果:
//if区间的用法
fun main() {
var a = 9
if (a in 1 .. 10) {
println("a如果等于1~10中的任意一个数,将打印该语句。")
}
if (a in 1 until 10){
println("a如果等于1~10且不包含10(即:1~9)中的任意一个数,将打印该语句。")
}
if(a in 1 until 10 step 2){
println("a按照步进区间判断如果等于1、3、5、7、9中的任意一个数,将打印该语句。")
}
}
运行结果:
2. when表达式
when表达式类似于java中的switch
fun main() {
var x: Int = 5
when (x) {
1 -> println("x == 1")
2 -> println("x == 2")
3 -> println("x == 3")
4 -> println("x == 4")
5 -> println("x == 5")
else -> println("x == 其他值")
}
}
运行结果:
当然,还有多值语句:
fun main() {
var x: Int = 5
when (x) {
1, 2, 3, 4 -> println("x等于1,2,3,4中的任意一个")
else -> {
println("x任何一个值都不等于")
println("我是块语句,我可以打印多条语句!")
}
}
}
结果:
关于->
的说明,->
是lambda表达式,你暂且可以将它当做一个匿名函数,由于不好表述,我就用以下代码作为解释。
///例如java中的
public static void main(String[] args) {
int x = 5;
switch (x) {
case 1:
case 2:
case 3:
case 4:
func(x);
default: {
System.out.println("x任何一个值都不等于");
System.out.println("我是块语句,我可以打印多条语句!");
}
}
}
public static void func(int x) {
System.out.println("x等于1,2,3,4中的任意一个");
}
when的用法还有很多:
//集合判断
fun main() {
val items = setOf("apple", "banana", "kiwi")
when {
"orange" in items -> println("juicy")
"apple" in items -> println("apple is fine too")
}
}
//方法判断
fun main() {
println(func4(0))
}
fun func4(code: Int): String = when (code) {
0 -> "登录成功!"
-1 -> "登录失败!"
else -> "未知错误!"
}
...
至于其他操作,如:区间
,is
等,就自己去试试吧。
3. 循环(for、while、 do ... while)
对于三大流程控制中的循环一块,比起条件控制,循环控制简直最常用的一块了。
然鹅初次涉及编程的人大概也是最头疼这一块了,在寻常的循环控制当中,简单地迭代、遍历已经能满足程序的运作。但是kotlin却为我们提供了更加新颖的流程控制。
一. for循环
首先来看for
循环
java程序中:
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
Kotlin中相同实现功能则是:
fun main(args: Array<String>){
for(i in 0 .. 9){
println(i)
}
}
java中迭代集合:
public static void main(String[] args) {
List<String> array = new ArrayList();
array.add("one");
array.add("two");
array.add("three");
for (String s : array) {
System.out.println(s);
}
}
kotlin中迭代集合:
fun main(args: Array<String>){
val arr:Array<String> = arrayOf("one","two","three")
for (s in arr) {
println(s)
}
//按遍历索引
for (i:Int in arr.indices) {
println("i=$i --- arr=${arr[i]}")
}
//键、值遍历
for ((i: Int, v: Any) in arr.withIndex()) {
println("i=$i ----- v=$v")
}
}
二. while、do ... while 循环
与java几乎无异了,
while
java代码:
public static void main(String[] args) {
int i = 0;
while (i <= 10) {
System.out.println(i++);
}
}
kotlin代码:
fun main(){
var i: Int = 0;
while (i in 0..9) {
println(i++)
}
}
do ... while
java代码:
public static void main(String[] args) {
int m = 0;
do {
System.out.println(i++);
} while (m <= 10);
}
kotlin代码:
fun main(){
int m = 0
do {
println(i++)
} while (m in 0 until 11);
}
循环这一块多说无益,需要自己结合各种kotlin中的新特性来理解。
4. 总结
- kotlin中
if
有了更多、更新颖的用法,如:if(x > 1 .. 10)
,var m = if(x > 1 .. 10)
... - kotlin中 多分支并不是传统的
switch
而是when 表达式
,在when 表达式
中else
等同于switch
中的default:
语句。 -
if
,when 表达式
,循环
都支持区间
- 在循环中以
indices
可遍历下标,withIndex()
可遍历键值