天天看點

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      

作者:​​靠譜楊​​​

我可能不是天才,但我會努力成為人才。

更多日常分享盡在我的VX公衆号:小楊的挨踢IT生活