Kotlin学习笔记(二)——示例篇二

继续上一篇文章的示例分析
参考链接是:https://try.kotl.in

示例一

条件表达式

/**
 * `if` is an expression, i.e. it returns a value.
 * Therefore there is no ternary operator (condition ? then : else),
 * because ordinary `if` works fine in this role.
 * See http://kotlinlang.org/docs/reference/control-flow.html#if-expression
 */
fun main(args: Array<String>) {
    println(max(Integer.parseInt(args[0]), Integer.parseInt(args[1])))
}

fun max(a: Int, b: Int) = if (a > b) a else b

分析:以上代码最主要的是是max函数,这个函数表达式是一个很简练的写法,上一篇文章中提到过,只是将函数要返回的类型用赋值表达式表达了,Java类似的方法是这样的

fun max(a:Int,b:Int) :Int{
    if(a>b)return a
    else return b
}

以上代码只加了个if-else语句

示例二

检查是否可以为null

/** * A reference must be explicitly marked as nullable to be able hold a null. * See http://kotlinlang.org/docs/reference/null-safety.html#null-safety */
package multiplier

// Return null if str does not hold a number
fun parseInt(str: String): Int? {
    try {
        return Integer.parseInt(str)
    } catch (e: NumberFormatException) {
        println("One of the arguments isn't Int")
    }
    return null
}

fun main(args: Array<String>) {
    if (args.size < 2) {
        println("No number supplied");
    } else {
        val x = parseInt(args[0])
        val y = parseInt(args[1])

        // We cannot say 'x * y' now because they may hold nulls
        if (x != null && y != null) {
            print(x * y) // Now we can
        } else {
            println("One of the arguments is null")
    }
    }
}

分析:以上代码主要的是函数parseInt();,如果字符串str能转换成Int,则返回正数,否则返回null,函数parseInt()的返回类型是 Int? ,这就是说如果是Int,就是Int,否则就是null,该函数接收null,用问好? 表示该引用可以接收null

示例三

用表达式检查类型

/**
  * The `is` operator checks if an expression is an instance of a type and more.
  * If we is-checked an immutable local variable or property, there's no need
  * to cast it explicitly to the is-checked type.
  * See this pages for details:
  * http://kotlinlang.org/docs/reference/classes.html#classes-and-inheritance
  * http://kotlinlang.org/docs/reference/typecasts.html#smart-casts
 */
fun main(args: Array<String>) {
    println(getStringLength("aaa"))
    println(getStringLength(1))
}

fun getStringLength(obj: Any): Int? {
    if (obj is String)
        return obj.length // no cast to String is needed
    return null
}

分析:上述代码中,主要的方法是getStringLength(),如果任意类型Any的变量obj是String类型,则返回该字符串的长度,否则返回null!该函数类似Java中的方法

int getStringLength(Object str){
       if (str instanceof String){
           return ((String)str).length();
       }
        return 0;
    }

在kotlin中, 使用is 来判断是否是某一类型,Java中用instanceof来判断

示例四

循环语句while和do..while的使用方法

/** * `while` and `do..while` work as usual. * See http://kotlinlang.org/docs/reference/control-flow.html#while-loops */
fun main(args: Array<String>) {
    var i = 0
    while (i < args.size)
        println(args[i++])
}

分析:以上代码,使用了while循环,进行数组遍历,并且i在遍历的过程中进行自增长!

示例五

使用for循环进行遍历

/** * For loop iterates through anything that provides an iterator. * See http://kotlinlang.org/docs/reference/control-flow.html#for-loops */
fun main(args: Array<String>) {
    for (arg in args)
        println(arg)

    // or
    println()
    for (i in args.indices)
        println(args[i])
}

分析:在Java中使用增强for循环的格式是for(Class class: Classes),而在kotlin中,使用for循环的格式是:`for(class in classes),不需要定义变量,通过使用in关键字,即指定了变量的类型和范围!

示例六

以下代码主要用于检查一个数是否在某一个范围内,或者不在某一个范围内,还可以检查某一个对象是否在一个集合内!

/**
 * Check if a number lies within a range.
 * Check if a number is out of range.
 * Check if a collection contains an object.
 * See http://kotlinlang.org/docs/reference/ranges.html#ranges
 */

fun main(args: Array<String>) {
    val x = Integer.parseInt(args[0])
    //Check if a number lies within a range:
    val y = 10
    if (x in 1..y - 1)
        println("OK")

    //Iterate over a range:
    for (a in 1..5)
        print("${a} ")

    //Check if a number is out of range:
    println()
    val array = arrayListOf<String>()
    array.add("aaa")
    array.add("bbb")
    array.add("ccc")

    if (x !in 0..array.size - 1)
        println("Out: array has only ${array.size} elements. x = ${x}")

    //Check if a collection contains an object:
    if ("aaa" in array) // collection.contains(obj) is called
        println("Yes: array contains aaa")

    if ("ddd" in array) // collection.contains(obj) is called
        println("Yes: array contains ddd")
    else
        println("No: array doesn't contains ddd")
}

分析:以上代码主要是对in的使用,in可以检查某个数是否在一个范围里,或者不在一个范围里;检查一个对象是否在一个集合里,不在一个集合里!
代码中有几个点第一次出现:

  1. arrayListOf的第一次使用
    在Java中,常用的ArrayList,在kotlin中,arrayListOf作用比较像,先看一下列表的创建和添加代码:
fun  arrayListTest(){
    var arrays=arrayListOf<String>()
    arrays.add("ddd")
    arrays.add("bbbb")
    arrays.add("addd")
    arrays.add("ccc")

}

看一下arrayListOf的函数说明:
**public fun arrayListOf(vararg values: T): ArrayList defined in kotlin
Returns a new ArrayList with the given elements.**,这下就明白arrayListOf的作用了,就是返回一个ArrayList集合元素
如何遍历一个集合呢?

fun  arrayListTest(){
    var arrays=arrayListOf<String>()
    arrays.add("ddd")
    arrays.add("bbbb")
    arrays.add("addd")
    arrays.add("ccc")
    for(s in arrays){
        println(s)
    }
}

判断某个元素是不是在集合中,使用in即可:

fun  arrayListTest(){
    var arrays=arrayListOf<String>()
    arrays.add("ddd")
    arrays.add("bbbb")
    arrays.add("addd")
    arrays.add("ccc")
    if("ccc" in arrays){
        println("在集合里")
    }
    if("ddddddd" in arrays){
        println("不在集合里")
    }
}

2 设定某个数值范围的方法使用
如何写从0到10的所有数呢?

fun rang(size : Int){
    for(b in 0..size){
        println(b)
    }
}

分析:数字0到10,可以这么写 0..10,中间加两个点即可

示例七

when

/** * See http://kotlinlang.org/docs/reference/control-flow.html#when-expression */

fun main(args: Array<String>) {
    cases("Hello")
    cases(1)
    cases(System.currentTimeMillis())
    cases(MyClass())
    cases("hello")
}

fun cases(obj: Any) {
    when (obj) {
        1 -> println("One")
        "Hello" -> println("Greeting")
        is Long -> println("Long")
        !is String -> println("Not a string")
        else -> println("Unknown")
    }
}

class MyClass() {
}

分析:以上代码主要部分是cases()函数,该函数使用when作为条件语句,支持整数,字符串,long,等判断,有点类似Java中的switch,但是比switch功能强大!

以上只是通过代码分析,自己的理解和代码测试来学习的,如果有不正确地地方,非常感谢能指出来,先谢过!

你可能感兴趣的:(android,demo,study,Kotlin)