diff --git a/src/main/scala/chapter2/demo2/DemoSimplify.scala b/src/main/scala/chapter2/demo2/DemoSimplify.scala new file mode 100644 index 0000000..51da80e --- /dev/null +++ b/src/main/scala/chapter2/demo2/DemoSimplify.scala @@ -0,0 +1,96 @@ +package chapter2.demo2 + +object DemoSimplify { + + def main(args: Array[String]): Unit = { + + + // 标准的函数定义 + def f0(name: String): String = { + return "hello " + name + } + + // 先定义函数,再调用 + val message = f0("f0") + println(message) + + + // 1. 函数有返回值的情况下,默认最后一个语句就是返回值,可以省略return关键字 + def f1(name: String): String = { + "hello " + name + } + + println(f1("f1")) + + // 2. 整个函数体内部只有一行代码,此时可以省略大括号 + def f2(name: String): String = "hello " + name + + println(f2("f2")) + + + // 3. 如果返回值的类型是确定的,可以被推断出来的,那么函数的定义可以省略返回值类型 + def f3(name: String) = "hello " + name + + println(f3("f3")) + + + // 4. 如果函数显式的使用return返回返回值,那么此时不能省略函数的返回值类型。 + // 省略了会报错,因为return是一个语句,这个语句的结果是Nothing,和return本身的值类型String不一致 + // def f4(name: String) = { + // return "hello " + name + // } + + // 5. 当我们显式定义返回值类型为Unit(空),那么就算使用return进行返回,函数的结果也会认为是Unit(空) + def f5(name: String): Unit = { + return "hello " + name + } + + println(f5("f5")) // () + + // 6. 当返回值为空,即函数的返回值为 Unit 类型时,可以省略返回值类型和后面的等号 + // 兼容其他语法的写法 + def f6(name: String) { + println("hello " + name) + } + + f6("f6") + + // 7. 空参函数,在调用的时候,后面的括号可要可不要 + def f7() { + println("hello f7") + } + + f7() + f7 + + + // 8. 空参函数,在定义的时候,也可以省略括号。此时,在调用的时候,后面的括号一定不能要 + def f8 { + println("hello f8") + } + + f8 + // 调用会报错,需要和f8的定义保持一致(没有括号) + // f8() + + // 9. 如果我们之关心函数的处理逻辑而不关心函数叫什么名字,那么此时可以省略函数名和 def关键字 + def f9(name: String): Unit = { + println("hello " + name) + } + + f9("f9") + + + // 匿名函数 + val f9_1 = (name: String) => { + println("hello " + name) + } + + // 匿名函数 (lambda) + val f9_2 = (name: String) => "hello " + name + f9_1("f9_1") + println(f9_2("f9_2")) + + + } +}