scala語言是乙個完全物件導向程式設計語言。萬物皆物件;
物件的本質:對資料和行為的乙個封裝 。
scala語言是乙個完全函式式程式語言。萬物皆函式。 解決問題時,將問題分解成乙個乙個的步驟,將每個步驟進行封裝(函式),通過呼叫這些封裝好的步驟,解決問題;
函式的本質:函式可以當做乙個值進行傳遞 。
在scala中函式式程式設計和物件導向程式設計完美的結合在了一起。
2.1 基礎概念
函式:為了完成某一功能的程式語句的集合稱為函式;
方法:類中的函式稱為方法;
函式沒有重寫、過載的概念;方法可以重寫、過載;
scala語言可以在任何語法結構中宣告任何的語法;
scala可以在函式中巢狀定義;
示例**:
objectfunctiontest
//方法過載
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 函式的引數
函式的引數可以是可變引數;
如果引數列表中存在多個引數,可變引數一般放在引數列表的最後;
如果引數有預設值,一般將有預設值的引數放在引數列表的後面;
帶名引數
objectfunctiontest02
//輸入引數:輸出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 將乙個函式作為值傳遞給另乙個函式 在...