Scala 函数至简原则

(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 }

 

posted @ 2022-01-04 15:38  靠谱杨  阅读(199)  评论(0编辑  收藏  举报