(1)return 可以省略,Scala 会使用函数体的最后一行代码作为返回值(2)如果函数体只有一行代码,可以省略花括号(3)返回值类型如果能够推断出来,那么可以省略(:和返回值类型一起省略)(4)如果有 return,则不能省略返回值类型,必须指定(5)如果函数明确声明 unit,那么即使函数体中使用 return 关键字也不起作用(6)Scala 如果期望是无返回值类型,可以省略等号(7)如果函数无参,但是声明了参数列表,那么调用时,小括号,可加可不加(8)如果函数没有参数列表,那么小括号可以省略,调用时小括号必须省略(9)如果不关心名称,只关心逻辑处理,那么函数名(def)可以省略
- 1 package com.atguigu.function
- 2
- 3 object TestFunction {
- 4 def main(args: Array[String]): Unit = {
- 5 // (0)函数标准写法
- 6 def f( s : String ): String = {
- 7 return s + " jinlian"
- 8 }
- 9 println(f("Hello"))
- 10 // 至简原则:能省则省
- 11 //(1) return 可以省略,Scala 会使用函数体的最后一行代码作为返回值
- 12 def f1( s : String ): String = {
- 13 s + " jinlian"
- 14 }
- 15 println(f1("Hello"))
- 16 //(2)如果函数体只有一行代码,可以省略花括号 类似数学上的f(x)=x+1
- 17 def f2(s:String):String = s + " jinlian"
- 18 //(3)返回值类型如果能够推断出来且省略了return,那么可以省略返回值类型的指定(:和返回值类型一起省略)
- 19 def f3( s : String ) =
- 20 {
- 21 s + " jinlian"
- 22 }
- 23 println(f3("Hello3"))
- 24 //(4)如果有 return,则不能省略返回值类型,必须指定。
- 25 def f4() :String = {
- 26 return "ximenqing4"
- 27 }
- 28 println(f4())
- 29 //(5)如果函数明确声明 Unit,那么即使函数体中使用 return 关键字也不起作用
- 30 def f5(): Unit = {
- 31 return "dalang5"
- 32 }
- 33 println(f5())
- 34 //(6)Scala 如果期望是无返回值类型,可以省略等号,将无返回值的函数称之为过程
- 35 def f6() {
- 36 "dalang6"
- 37 }
- 38 println(f6())
- 39 //(7)如果函数无参,但是声明了参数列表,那么调用时,小括号,可加可不加
- 40 def f7() = "dalang7"
- 41 println(f7())
- 42 println(f7)
- 43 //(8)如果函数没有参数列表,那么小括号可以省略,调用时小括号必须省略
- 44 def f8 = "dalang"
- 45 //println(f8())
- 46 println(f8)
- 47 //(9)如果不关心名称,只关心逻辑处理,那么函数名(def)可以省略
- 48 def f9 = (x:String)=>{println("wusong")}
- 49 def f10(f:String=>Unit) = {
- 50 f("")
- 51 }
- 52 f10(f9)
- 53 println(f10((x:String)=>{println("wusong")}))
- 54 //匿名函数 :没有名字的函数,通过lambda表达式实现 (参数)=>{函数体}
- 55
- 56 //f9((s:String)=>{println(s)})
- 57 //(1)参数的类型可以省略,会根据形参进行自动的推导
- 58
- 59 //f9((s)=>{println(s)})
- 60 //(2)类型省略之后,发现只有一个参数,则圆括号可以省略;其他情况:没有参数和参数超过1的永远不能省略圆括号。
- 61
- 62 //f9(s =>{println(s)})
- 63 //(3)匿名函数如果只有一行,则大括号也可以省略
- 64
- 65 //f9(s =>println(s))
- 66 //(4)如果参数只出现一次,则参数省略且后面参数可以用_代替
- 67
- 68 //f9(println(_))
- 69 // (5) 如果可以推断出,println是一个函数体,而不是调用语句,那么(_)可以省
- 70
- 71 // f9(println)
- 72 //反推导 f9((s:String)=>println(s))
- 73 //加深大家理解
- 74
- 75 //定义一个函数,接受一个函数类型的参数,该函数类型有两个参数
- 76
- 77 def f11(fun:(Int,Int)=>Int):Int={
- 78
- 79 fun(1,2)
- 80
- 81 }
- 82 //println(f11((x:Int,y:Int)=>{x + y}))
- 83
- 84 //println(f11((x,y)=>x + y))
- 85
- 86 println(f11(_ + _))
- 87 }
- 88 }