Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[kotlin] range的用法,list的用法,面向对象特性1 #3

Open
zhangjin-007 opened this issue Feb 19, 2018 · 0 comments
Open

Comments

@zhangjin-007
Copy link
Owner

zhangjin-007 commented Feb 19, 2018

结合上篇文章,kotlin里面的range使用..来表示,java中的range一般是前闭后开,kotlin中的则不一样,2..8是表示2到8,也包含8,首先我们看个例子

    val a = 5
    val b = 10

    if (a in 2..b) {
        println("in the range")
    }

    if (a !in 2..b) {
        println("out of the range")
    }

    println("------")

    for (i in 2..10) {
        println(i)
    }

    println("------")

    for (i in 2.rangeTo(10)) {
        println(i)
    }

    println("------")

    //步进
    for (i in 2..10 step 2) {
        println(i)
    }

    println("------")

    //10-2 步进4
    for (i in 10 downTo 2 step 4) {
        println(i)
    }

第一个跟第二循环表示的意思相同,第三个通过step来进行步进,第四个则是反过来步进,很直观

java8中stream操作一个数组很方便,那么在kotlin中是什么样的呢,我们看如下例子

fun main(args: Array<String>) {
    var array = listOf<String>("hello", "world", "hello world", "welcome", "bye")

    for (item in array) {
        println(item)
    }

    println("------")

    when {
        "world" in array -> println("world in collection")
    }

    //找出长度超过5 字符串大写,默认字符排序,打印控制台 awsome
    array
            .filter { it.length > 5 }
            .map { it.toUpperCase() }
            .sorted().forEach { println(it) }
}
1.找出集合里面的world 使用when表达式 替代了传统的if,这个跟之前的when的使用又不一样
2.实现的流的操作,比之java8的语法更加优雅, it代表lambda表达式的入参

最后一个例子是写class的,跟java中做对比

class EmptyClass

如果往class前面添加public也是可以的,但是编辑器提醒public是多余的,说明默认class就是public的,加不加都可以,其次java中要求public class 类名跟文件名保持一致,在kotlin中没有这样的规定,如果类中什么也没有,可以不带花括号
在看下面

class MyClass constructor(userName : String){
    private val userName: String = userName.toUpperCase()

    init {
        println(userName)
    }
}

fun main(args: Array<String>) {
    val myClass: MyClass = MyClass("zhangsan")
}

1.在kotlin中,一个类可以有个primary构造方法以及一个或者多个secondary构造方法
2.primary构造方法是类头(class head) 的一部分,它位于类名后面,可以拥有若干参数
3.如果primary构造方法没有任何注解或者可见性关节字修饰,那么constructor关键字可以省略
4.初始化MyClass,省略了new关键字
上面的例子可以看到init代码块其实就是类似之前java构造方法的逻辑,这里构造方法,跟初始化构造方法逻辑做了拆分,构造方法要么用于初始化成员变量,要么用于init代码块逻辑,如上面例子,上面例子运行结果
zhangsan

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant