(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生活