Scala函式式程式設計

2022-09-21 02:12:08 字數 3321 閱讀 9536

scala語言是乙個完全物件導向程式設計語言。萬物皆物件;

物件的本質:對資料和行為的乙個封裝 。

scala語言是乙個完全函式式程式語言。萬物皆函式。 解決問題時,將問題分解成乙個乙個的步驟,將每個步驟進行封裝(函式),通過呼叫這些封裝好的步驟,解決問題;

函式的本質:函式可以當做乙個值進行傳遞 。

在scala中函式式程式設計和物件導向程式設計完美的結合在了一起。

2.1 基礎概念

函式:為了完成某一功能的程式語句的集合稱為函式;

方法:類中的函式稱為方法;

函式沒有重寫、過載的概念;方法可以重寫、過載;

scala語言可以在任何語法結構中宣告任何的語法;

scala可以在函式中巢狀定義;

示例**:

object

functiontest

//方法過載

def main(args: array[string]): unit =

//呼叫test函式

test()

//程式報錯,函式沒有重寫、過載的概念

//def test(name:string):unit =

//函式中巢狀定義

def test2(): unit =

test3(

"zhangsan")

}test2()

}}輸出:這是main方法的過載方法

fri feb

1118:52:22 cst 2022

無參無返回值test函式

這是在main方法中test2函式中巢狀定義的test3函式

2.2 函式的定義

無參,無返回值;

無參,有返回值;

有參,無返回值;

有參,有返回值;

多參,無返回值;

多參,有返回值;

2.3 函式的引數

函式的引數可以是可變引數;

如果引數列表中存在多個引數,可變引數一般放在引數列表的最後;

如果引數有預設值,一般將有預設值的引數放在引數列表的後面;

帶名引數

object

functiontest02

//輸入引數:輸出array

test("

hello

","scala")

//無輸入引數:輸出結果為list()

test()

//如果函式列表中存在多個引數,可變引數一般放在最後

def test2(name:string,age:int,s:string*): unit =

test2(

"zhangsan

",18,"

hello")

//帶有預設值的引數

def test3(name:string,age:int = 20): unit =

//傳參覆蓋預設值

test3("

lisi

",18

)

//不傳參,使用預設值

test3("

wangwu")

//帶名引數,這樣就不用按照引數列表的順序輸入引數了

test3(age = 30,name = "

xiaoming")

}}輸出:list()

lisi,

18wangwu,

20xiaoming,

30

2.4 scala中函式至簡原則(重點)

return可以省略,scala會使用函式體的最後一行**作為返回值 ;

如果函式體只有一行**,可以省略花括號 ;

返回值型別如果能夠推斷出來,那麼可以省略;

如果有return,則不能省略返回值型別,必須指定;

如果函式明確宣告unit,那麼即使函式體中使用return關鍵字也不起作用;

scala如果期望是無返回值型別,可以省略等號 ;

如果函式無參,但是宣告了引數列表,那麼呼叫時,小括號,可加可不加 ;

如果函式沒有引數列表,那麼小括號可以省略,呼叫時小括號必須省略;

如果不關心名稱,只關心邏輯處理,那麼函式名(def)可以省略;

對應的**示例:

def main(args: array[string]): unit =

println(f1(

"hello"))

//2、如果函式只有一行,可以省略花括號

def f2(s: string): string = s + "

,haha

"println( f2(

"hello"))

//3、如果返回值可以推斷出來,那麼可以省略

def f3(s: string) = s + "

world.

"println(f3(

"省略返回型別的方法:"))

//4、如果有return,則必須指定返回型別

def f4(s: string): string = return

s println(f4(

"因為有return,必須執行返回型別"))

//5、若返回型別式unit,則有return也不起作用

def f5(): unit = return

"zhangsan

"println(f5())

//6、如果scala希望無返回值型別,則可以省略等號

def f6()

println(f6())

//7、如果函式無參,但是有引數列表,那麼呼叫時,小括號可加可不加

def f7(): unit =

println(f7)

//8、如果函式沒有引數列表,那麼呼叫時必須省略小括號

def f8: unit = "

tadajiu"//

f8() 程式錯誤

println(f8)

//9、如果只關心函式邏輯,不關心函式名,那麼函式名(def)可以省略

//"=>" 可以用來連線匿名函式

var var1 = (s: int) => s + 2

//這裡是"=>"的by-name parameters用法

//函式f9中的引數fun 就是by-name,如果f9中傳入普通的字串或者非函式的變數,那麼f9就和普通的函式用法完全一樣

//但是當把乙個返回值為string型別的函式f10傳入f9時,那麼f10就會被先執行後再當作引數傳入f9.

def f9(fun: => string): unit =

def f10():string =

println(f9(f10))

}}

SCALA函式式程式設計

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 scala的語法規定,將函式賦值給變數時,必須在函式後面加上空格和下劃線 正常宣告乙個帶有乙個字串型別引數,並返回unit型別的方法 sca...

Scala函式式程式設計

知識點1.scala的柯里化技術,允許將接受多個引數的函式,轉變為接受單一引數的函式 2.柯里化的作用可以允許使用者自建控制結構 object demo03 f1 a int,b int int def f11 a int b int f11 a int b int int def f2 a int...

Scala函式式程式設計

package com.yz6 import scala.collection.mutable.arraybuffer object test 定義乙個函式 軀殼 靈魂 def function0 name string unit println 你好 name 將乙個函式作為值傳遞給另乙個函式 在...