Scala函數(shù)

1、Scala函數(shù)的定義

def fun (a: Int , b: Int ) : Unit ={
   println(a+b)
}
fun(1,1)
    
def fun1 (a : Int , b : Int)= a+b
println(fun1(1,2))  

def max(a:Int, b:Int) ={
    if (a > b) {
      a
    } else {
      b
    }
}
  • 方法可以寫(xiě)返回值的類(lèi)型也可以不寫(xiě),會(huì)自動(dòng)推斷,有時(shí)候不能省略,必須寫(xiě),比如在遞歸函數(shù)中,或者函數(shù)的返回值是函數(shù)類(lèi)型的時(shí)候
  • Scala中函數(shù)有返回值時(shí),可以寫(xiě)return,也可以不寫(xiě)return,會(huì)把函數(shù)中最后一行當(dāng)做結(jié)果返回。當(dāng)寫(xiě)return時(shí),必須指定函數(shù)的返回值
  • 如果返回值可以一行搞定,可以將{ }省略不寫(xiě)
  • Scala規(guī)定傳遞給方法的參數(shù)都是常量val的,不是var的
  • 如果去掉方法體前面的等號(hào) ={ },那么這個(gè)方法返回類(lèi)型必定是Unit的。無(wú)論方法體里面是什么邏輯都成立;Scala可以把任意類(lèi)型轉(zhuǎn)換為Unit。假設(shè),里面的邏輯最后返回了一個(gè)String,那么這個(gè)返回值會(huì)被轉(zhuǎn)換成Unit,并且值會(huì)被丟棄。

2、遞歸函數(shù)

自己調(diào)自己,必須指定函數(shù)的返回值類(lèi)型

// 5的階乘
def fun2(num :Int) :Int= {
   if(num ==1)
      num
   else 
      num * fun2(num-1)
}
print(fun2(5))

3、包含參數(shù)默認(rèn)值的函數(shù)

類(lèi)型后面直接指定默認(rèn)值

def fun3(a :Int = 10,b:Int) = {
   println(a+b)
}
fun3(b=2)
  • 如果傳入的參數(shù)個(gè)數(shù)與函數(shù)定義相同,則傳入的數(shù)值會(huì)覆蓋默認(rèn)值。
  • 如果不想覆蓋默認(rèn)值,傳入的參數(shù)個(gè)數(shù)小于定義的參數(shù),則需要指定參數(shù)名稱(chēng)。

4、可變參數(shù)個(gè)數(shù)的函數(shù)

多個(gè)參數(shù)用逗號(hào)分開(kāi)

def fun4(elements :Int*)={
   var sum = 0;
   for(elem <- elements){
      sum += elem
   }
   sum
}
println(fun4(1,2,3,4))

5、匿名函數(shù):()=>{}

可以將匿名函數(shù),返回給val定義的值
匿名函數(shù)不能顯式聲明函數(shù)的返回類(lèi)型,它會(huì)自己類(lèi)型推導(dǎo)
匿名函數(shù)中參數(shù)只用了1次,用_代替

// 有參數(shù)匿名函數(shù)
val value1 = (a : Int) => {
   println(a)
}
value1(1)

// 無(wú)參數(shù)匿名函數(shù)
val value2 = ()=>{
   println("我愛(ài)Scala")
}
value2()

// 有返回值的匿名函數(shù)
val value3 = (a:Int, b:Int) =>{
   a+b
}
println(value3(4,4)) 

6、嵌套函數(shù)

方法里面套方法,從上到下執(zhí)行,main()函數(shù)里面定義函數(shù)

// 嵌套函數(shù)求5的階乘
def fun5(num :Int)={
   def fun6(a:Int, b:Int) :Int={
      if(a == 1){
         b
      } else {
         fun6(a-1,a*b)
      }
   }
   fun6(num,1)
}
println(fun5(5))

7、偏應(yīng)用函數(shù)

是一個(gè)表達(dá)式,指定不變的,變化的用_表示
不需要提供函數(shù)需要的所有參數(shù),只需要提供部分,或不提供所需參數(shù)

def log(date :Date, s :String) ={
   println("date is "+ date +",log is "+ s)
}
    
val date = new Date()
log(date ,"log1")
log(date ,"log2")
log(date ,"log3")
    
// 想要調(diào)用log,以上變化的是第二個(gè)參數(shù),可以用偏應(yīng)用函數(shù)處理
val logWithDate = log(date,_:String)
logWithDate("aaa")
logWithDate("bbb")
logWithDate("ccc")

8、高階函數(shù)

參數(shù)是函數(shù),直接傳函數(shù)名,不要調(diào)用
返回是函數(shù),必須顯示聲明返回值類(lèi)型

// 函數(shù)的參數(shù)是函數(shù)
def hightFun(f : (Int,Int) =>Int, a:Int ) : Int = {
   f(a,100)
}
def f(v1 :Int,v2: Int):Int  = {
   v1+v2
}
println(hightFun(f, 1))


// 函數(shù)的返回是函數(shù)
// 1,2,3,4相加
// 給1個(gè)Int,給1個(gè)Int,出1個(gè)Int
def hightFun2(a:Int, b:Int) : (Int, Int)=>Int = {
   def f2 (v1:Int, v2:Int) :Int = {
      v1+v2+a+b
   }
   f2
}
println(hightFun2(1, 2)(3, 4))


// 函數(shù)的參數(shù)是函數(shù),函數(shù)的返回是函數(shù)
def hightFun3(f : (Int ,Int) => Int) : (Int,Int) => Int = {
   f
} 
println(hightFun3(f)(100,200))
println(hightFun3((a,b) =>{a+b})(200,200))
// 以上這句話(huà)還可以寫(xiě)成這樣
// 如果函數(shù)的參數(shù)在方法體中只使用了一次 那么可以寫(xiě)成_表示
println(hightFun3(_+_)(200,200))
高階函數(shù)

9、柯里化函數(shù)

理解為高階函數(shù)的簡(jiǎn)化

def fun7(a:Int, b:Int)(c:Int, d:Int) = {
   a+b+c+d
}
println(fun7(1,2)(3,4))
Scala函數(shù)


Scala學(xué)習(xí)筆記導(dǎo)航

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Scala與Java的關(guān)系 Scala與Java的關(guān)系是非常緊密的??! 因?yàn)镾cala是基于Java虛擬機(jī),也就是...
    燈火gg閱讀 3,608評(píng)論 1 24
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫(xiě)文章,發(fā)現(xiàn)簡(jiǎn)書(shū)還為我保存起的...
    Jenaral閱讀 3,148評(píng)論 2 9
  • 周日的晚上,王兄和我一起去秦媽火鍋店小聚了下,路上感受到了兄弟北方人典型的性格:豪爽大咧和親和。同時(shí)也感受到了旅行...
    不羈的蛋黃閱讀 493評(píng)論 2 3
  • 秋來(lái)熱不去,夏逝炎又升。 伏外仍有暑,園內(nèi)悶無(wú)風(fēng)。 搖蒲槐蔭下,狂蟬噪連聲。 舉桿沾蟬落,順手握鵝頸。
    云逸1108閱讀 384評(píng)論 4 1
  • 不覺(jué)冬歸與春到,但知無(wú)事日偏長(zhǎng)。一聲春雷響,萬(wàn)物始新生。立春剛過(guò),驚蟄就來(lái)了,意味著冬天已經(jīng)結(jié)束,伸個(gè)懶腰,新的歷...
    芳芳_4a89閱讀 526評(píng)論 0 2

友情鏈接更多精彩內(nèi)容