第八节 函数表达式

1、


fun main(args: Array) {

    val a=10;
    val b=20
    println(add(10, 20))
    println(add1(a,b))

}

fun add(a:Int,b:Int):Int{
    return a+b
}

//函数体只有一行代码  可以省略{} 省略return 用=连接
//返回值类型也可以省略
fun add1(a:Int,b:Int)=a+b

输出:


第八节 函数表达式_第1张图片
image.png

2、函数引用


fun main(args: Array) {

    val a=10
    val b=20
    println(add1(a,b))

    //通多::可以获取函数的引用
    var add2=::add1
    println(add2(a, b))
    //还有一种调用方式
    println(add2.invoke(a, b))
    //利用invoke有个好处就是可以空安全调用
    println(add2?.invoke(a, b))

}

//函数体只有一行代码  可以省略{} 省略return 用=连接
//返回值类型也可以省略
fun add1(a:Int,b:Int)=a+b

输出:


第八节 函数表达式_第2张图片
image.png

3、函数变量


fun main(args: Array) {

    val a=10
    val b=20
   //函数变量
    val add:(Int,Int)->Int={a,b->a+b}
    println(add.invoke(a,b))

}

输出:


image.png

4、默认参数和具名参数


fun main(args: Array) {

   //假设有个请求方法,可以接受get请求和post请求,但是绝大部分情况都是post请求
    sendRequest("http://www.baidu.com","get")
    sendRequest("http://www.google.com","post")
    sendRequest("http://www.google.com","post")
    sendRequest("http://www.google.com","post")
    sendRequest("http://www.google.com","post")
    sendRequest("http://www.google.com","post")

}

fun sendRequest(url:String,method:String)
{
    println("请求地址为${url},请求方式为${method}")
}

输出:


第八节 函数表达式_第3张图片
image.png

但是绝大部分都是post请求,我们能不能省略掉post参数呢?
于是,我们用“默认参数”修改代码


fun main(args: Array) {

   //假设有个请求方法,可以接受get请求和post请求,但是绝大部分情况都是post请求
    sendRequest("http://www.baidu.com","get")
    sendRequest("http://www.google.com")
    sendRequest("http://www.google.com")
    sendRequest("http://www.google.com")
    sendRequest("http://www.google.com")
    sendRequest("http://www.google.com")

}

fun sendRequest(url:String,method:String="post")
{
    println("请求地址为${url},请求方式为${method}")
}

输出:


第八节 函数表达式_第4张图片
image.png

fun main(args: Array) {

   //假设有个请求方法,可以接受get请求和post请求,但是绝大部分情况都是post请求
    sendRequest("http://www.baidu.com","get")
    //如果传递参数时,指定了参数的名字,那么参数位置是可以不固定的
    sendRequest(method = "post",url = "http://www.google.com")

}

fun sendRequest(url:String,method:String="post")
{
    println("请求地址为${url},请求方式为${method}")
}

输出:


第八节 函数表达式_第5张图片
image.png

5、可变参数,关键字vararg


fun main(args: Array) {

    println(add(10, 20, 30))
    println(add(1, 2, 3, 4, 5, 6))


}

fun add(vararg a:Int):Int{
    var result=0
    a.forEach { result+=it }
    return result
}

输出:


第八节 函数表达式_第6张图片
image.png

6、异常


fun main(args: Array) {

    var a=10
    var b=0
    try {
        a/b
    }
    catch (e:Exception)
    {
        println("捕获到异常")
    }
    finally {
        println("finally")
    }


}

输出:


第八节 函数表达式_第7张图片
image.png
import java.io.BufferedReader
import java.io.File
import java.io.FileReader

fun main(args: Array) {

    var file: File = File("/sdcard/a.txt")
    //没有报错,在kotlin 中不检查编译时异常,kotlin认为大部分的编译时异常都不会发生
    //但是在java中编译时异常是需要捕获的
    var br:BufferedReader= BufferedReader(FileReader(file))
}

看下在java中

public static void main(String[] args) {

        File file=new File("/sdcard");
        BufferedReader reader= null;
        try {
            reader = new BufferedReader(new FileReader(file));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

你可能感兴趣的:(第八节 函数表达式)