package com.zj.example.kotlin.helloworld

/**
 * 函数的声明
 * CreateTime: 17/9/6  15:10
 * @author 郑炯
 */


fun main(args: Array<String>) {

    //会输出9
    println(getDefaultValue())

    //会输出say zhengjiong
    println(say3())

    //会输出true
    println(containEmpty("a", null))
}


/**
 * 函数使用关键字fun声明，如下代码创建了一个名为say()的函数，
 * 它接受一个String类型的参数，并返回一个String类型的值
 */
fun say1(args: String): String {
    return args
}

/**
 * 同时，在 Kotlin 中，如果像这种简单的函数，可以简写.
 * say1可以这样简写:say2
 */
fun say2(args: String): String = args


/**
 * 如果返回值是int类型, 那么你甚至连返回类型都可以不写,如下:
 */
fun getIntValue(args: Int) = args

/**
 * 函数的默认参数
 */
fun getDefaultValue(args: Int = 9) = args

/**
 * 函数的默认参数
 * 这时候你可以调用say()，来得到默认的字符串 "say zhengjiong"，也可以自己传入参数say("world")来得到传入参数值。
 */
fun say3(args: String = "say zhengjiong"): String = args


/**
 * 可变参数
 * 同 Java 的变长参数一样，Kotlin 也支持变长参数
 * 在Kotlin中，使用关键字vararg来表示
 */
fun containEmpty(vararg str: String?): Boolean{
    for (s in str) {
        //s为空的时候会返回true
        s ?: return true
    }

    return false
}

/**
2.3.4 扩展函数

你可以给父类添加一个方法，这个方法将可以在所有子类中使用
例如，在 Android 开发中，我们常常使用这样的扩展函数：

fun Activity.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) {
    Toast.makeText(this, message, duration).show()
}
这样，我们就可以在每一个Activity中直接使用toast()函数了。
 */