今天學習了scala的函式式程式設計
函式式程式設計
1 函式基礎
1.1 函式基本語法
1)基本語法
2)案例實操
需求:定義乙個函式,實現將傳入的名稱列印出來。
def main(args: array[string]): unit =
// (2)函式呼叫
// 函式名(引數)
f("hello world")
}1.2 函式和方法的區別
1)核心概念
(1)為完成某一功能的程式語句的集合,稱為函式。
(2)類中的函式稱之方法。
2)案例實操
(1)scala 語言可以在任何的語法結構中宣告任何的語法
(2)函式沒有過載和重寫的概念;方法可以進行過載和重寫
(3)scala 中函式可以巢狀定義
object test
def main(args: array[string]): unit =
test()
def test(name:string):unit=
//(3)scala 中函式可以巢狀定義
def test2(): unit =}}
}1.3 函式定義
1)函式定義
(1)函式 1:無參,無返回值
(2)函式 2:無參,有返回值
(3)函式 3:有參,無返回值
(4)函式 4:有參,有返回值
(5)函式 5:多參,無返回值
(6)函式 6:多參,有返回值
2)案例實操
def main(args: array[string]): unit =
test1()
// 函式 2:無參,有返回值
def test2():string=
println(test2())
// 函式 3:有參,無返回值
def test3(s:string):unit=
test3("jinlian")
// 函式 4:有參,有返回值
def test4(s:string):string=
println(test4("hello "))
// 函式 5:多參,無返回值
def test5(name:string, age:int):unit=
test5("dalang",40)
}1.4 函式引數
(1)可變引數
(2)如果引數列表中存在多個引數,那麼可變引數一般放置在最後
(3)引數預設值,一般將有預設值的引數放置在引數列表的後面
(4)帶名引數
def main(args: array[string]): unit =
// 有輸入引數:輸出 array
test("hello", "scala")
// 無輸入引數:輸出 list()
test()
// (2)如果引數列表中存在多個引數,那麼可變引數一般放置在最後
def test2( name : string, s: string* ): unit =
test2("jinlian", "dalang")
// (3)引數預設值
def test3( name : string, age : int = 30 ): unit =
// 如果引數傳遞了值,那麼會覆蓋預設值
test3("jinlian", 20)
// 如果引數有預設值,在呼叫的時候,可以省略這個引數
test3("dalang")
// 一般情況下,將有預設值的引數放置在引數列表的後面
def test4( *** : string = "男", name : string ): unit =
// scala 函式中引數傳遞是,從左到右
//test4("wusong")
//(4)帶名引數
test4(name="ximenqing")
}1.5 函式至簡原則(重點)
函式至簡原則:能省則省
1)至簡原則細節
(1)return 可以省略,scala 會使用函式體的最後一行**作為返回值
(2)如果函式體只有一行**,可以省略花括號
(3)返回值型別如果能夠推斷出來,那麼可以省略(:和返回值型別一起省略)
(4)如果有 return,則不能省略返回值型別,必須指定
(5)如果函式明確宣告 unit,那麼即使函式體中使用 return 關鍵字也不起作用
(6)scala 如果期望是無返回值型別,可以省略等號
(7)如果函式無參,但是宣告了引數列表,那麼呼叫時,小括號,可加可不加
(8)如果函式沒有引數列表,那麼小括號可以省略,呼叫時小括號必須省略
(9)如果不關心名稱,只關心邏輯處理,那麼函式名(def)可以省略
2)例def main(args: array[string]): unit =
println(f("hello"))
// 至簡原則:能省則省
//(1) return 可以省略,scala 會使用函式體的最後一行**作為返回值
def f1( s : string ): string =
println(f1("hello"))
//(2)如果函式體只有一行**,可以省略花括號
def f2(s:string):string = s + " jinlian"
//(3)返回值型別如果能夠推斷出來,那麼可以省略(:和返回值型別一起 省略)
def f3( s : string ) = s + " jinlian"
println(f3("hello3"))
//(4)如果有 return,則不能省略返回值型別,必須指定。
def f4() :string =
println(f4())
//(5)如果函式明確宣告 unit,那麼即使函式體中使用 return 關鍵字也 不起作用
def f5(): unit =
println(f5())
//(6)scala 如果期望是無返回值型別,可以省略等號
// 將無返回值的函式稱之為過程
def f6()
println(f6())
//(7)如果函式無參,但是宣告了引數列表,那麼呼叫時,小括號,可加可 不加
def f7() = "dalang7"
println(f7())
println(f7)
//(8)如果函式沒有引數列表,那麼小括號可以省略,呼叫時小括號必須省 略
def f8 = "dalang"
//println(f8())
println(f8)
//(9)如果不關心名稱,只關心邏輯處理,那麼函式名(def)可以省略
def f9 = (x:string)=>
def f10(f:string=>unit) =
f10(f9)
println(f10((x:string)=>))
}高階函式的內容現在初步理解,能夠做到看到理解什麼意思,也能自己編寫一部分。
待之後使用更加熟練時會分享經驗
2021 2023年寒假學習進度08
今天繼續學習scala 今天主要了解了泛型的使用,並且學習了vue,後續會總結vue的學習 1 協變和逆變 1 語法 class mylist t class mylist t class mylist t 不變 2 說明 協變 son 是 father 的子類,則 mylist son 也作為 m...
2021 2023年寒假學習進度19
今天完成了spark基礎實驗四,1 熟悉spark 的rdd 基本操作及鍵值對操作 2 熟悉使用rdd 程式設計解決實際具體問題的方法。作業系統 ubuntu16.04 spark 版本 2.1.0 請根據給定的實驗資料,在 spark shell 中通過程式設計來計算以下內容 1 該系總共有多少學...
寒假學習進度
今天就是踐行spark的安裝了。安裝spark 配置檔案spark env.sh 驗證spark是否安裝成功。grep 命令進行過濾。下面是關於hdfs的命令 上傳檔案 hdfs dfs put src dest 從本地的src位置上傳到hdfs的dest位置,src可以有多個,空格隔開 複製檔案 ...