日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[scala-spark]4. 函数式编程

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [scala-spark]4. 函数式编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 幾個概念說明

  • 在Scala中,方法與函數幾乎可以等同(定義 使用 運行機制),只是函數的使用方法更加靈活多樣
  • 函數式編程是從編程方式的角度來談的。函數式編程把函數當成一等公民,充分利用函數、支持函數的多種使用方式(調用)。既可以作為函數的參數使用,也可以將函數賦值給一個變量;此外函數的創建不用依賴類或者對象,而在Java中,函數的創建需要依賴類/抽象類或者接口
package com.lineshen.chapter5object method2FunctionDemo {def main(args: Array[String]): Unit = {val dog = new Dogval res1 = dog.sum(10, 20)println(res1)//方法轉成函數val func = dog.sum _val res2 = func(20, 30)println(res2)//函數編程val func2 = (n1: Int, n2: Int) => n1 + n2val res3 = func2(30,40)println(res3)} }class Dog {def sum(n1: Int, n2: Int): Int = {n1 + n2} }>>30 >>50 >>70

函數的基本約定:

def 函數名([參數名:參數類型], ... ) [[:返回類型]] = {函數體return 返回值 }
  • 函數申明關鍵字是 def
  • [參數:參數類型] 表示函數的輸入,可以沒有,如果有多個,用逗號分割
  • 函數中的語句是為了實現某一功能的代碼塊
  • 函數可以有返回值,也可以沒有;最好使用=,直接進行返回類型的推導
  • 如果沒有 reture ,默認以執行到最后一行的結果作為返回值
package com.lineshen.chapter5object FunDemo1 {def main(args: Array[String]): Unit = {val n1 = 1val n2 = 2println("sum="+getSum(n1,n2,"+"))}def getSum(n1: Int, n2: Int,opt: String) = {if (opt == "+"){n1 + n2} else if (opt == "-"){n1 - n2} else {null}} }

本例中,n1+n2 / n1-n2 與 null的類型無法統一,就可以直接使用=進行返回類型的推導。

2. 函數遞歸

函數遞歸需要遵守的重要規則:

  • 程序執行函數時,就會創建一個新的受保護的獨立空間(新函數棧)
  • 函數的局部變量是相互獨立的,不會相互影響
  • 遞歸必須向逼近遞歸的條件逼近,否則就是無限遞歸

3. 函數的注意事項以及使用細節

  • 如果函數沒有形參,那么函數調用過程中,不用寫()
  • 形參列表和返回值列表的數據類型可以是值類型,也可以是引用類型
package com.lineshen.chapter5object funcDetails {def main(args: Array[String]): Unit = {val tiger0 = new tigerprintln(tiger0.name)val tiger1 = test(100, tiger0)println(tiger1.name)}def test(n1:Int, tiger0:tiger): tiger= {println("n1="+ n1)tiger0.name = "jack"tiger0} }class tiger{var name = "lineshen" }

輸出結果: lineshen 100 jack

  • Scala中的函數可以根據函數體最后一行代碼自動推斷函數的返回值類型,該種情況下,return也可以不用寫
  • 因為Scala可以自動推斷返回值類型,因此,直接使用=就好了,或者用[:Any=]
  • 一旦使用return,就必須指定返回值類型 [:返回值類型];如果不指定,就是表示該函數沒有任何返回值
  • 如果函數返回值制定了Unit,那么return無效
  • Scala支持高級嵌套,如類中可以再一次聲明類;方法中可以繼續定義方法
package com.lineshen.chapter5object dupFunc {def main(args: Array[String]): Unit = {def sayOK(): Unit = { // private final sayOK$1println("say ok")def sayOK(): Unit = { // private final sayOK$2println("say ok, say ok")}}} }
  • 形參可以進行初始化,默認調用;實參會覆蓋形參;可以指定覆蓋特定的形式參數默認值【帶名參數】
  • Scala中的形參默認為是val,函數體中不允許去修改
  • 遞歸無法進行類型自動推導,必須指定返回類型
  • 支持可變形參,用for進行解析

4. 惰性函數

惰性計算(盡可能延遲表達式求值)是許多函數式編程語言的特性。惰性集合在需要時提供其元素,無需預先計算它們,這帶來了一些好處。首先,可以將耗時的計算推遲到絕對需要的時候。其次,可以創造無限個集合,只要它們繼續收到請求,就會繼續提供元素。函數的惰性使用能夠得到更高效的代碼。Java并沒有為惰性提供原生支持, Scala提供了,使用很方便。

object layDemo {def main(args: Array[String]): Unit = {lazy val res = sum(10, 20)println("-------------")println("-------------")println("-------------")println(res)}def sum(n1: Int, n2: Int): Int = {n1 + n2}

輸出結果(lazy函數只能用val進行修飾,為了保證線程安全):

-------------
-------------
-------------
30

5. 異常處理

  • 拋出異常

Scala 拋出異常的方法和 Java一樣,使用 throw 方法,例如,拋出一個新的參數異常:

throw new IllegalArgumentException
  • 捕捉異常

異常捕捉的機制與其他語言中一樣,如果有異常發生,catch字句是按次序捕捉的。因此,在catch字句中,越具體的異常越要靠前,越普遍的異常越靠后。 如果拋出的異常不在catch字句中,該異常則無法處理,會被升級到調用者處。

捕捉異常的catch子句,語法與其他語言中不太一樣(java使用了try-catch-catch-finnaly 無論有沒有異常 finally代碼塊都會執行,一般用來釋放資源)。在Scala里,借用了模式匹配的思想來做異常的匹配,因此,在catch的代碼里,是一系列case字句,如下例所示:

import java.io.FileReader import java.io.FileNotFoundException import java.io.IOExceptionobject exceptionDemo {def main(args: Array[String]) {try {val f = new FileReader("input.txt")} catch {case ex: FileNotFoundException => {println("Missing file exception")}case ex: IOException => {println("IO Exception")}}finally{println("Programming has run")}} }

輸出結果:

Missing file exception
Programming has run? ?【實際應用中,一般用于釋放資源】

總結

以上是生活随笔為你收集整理的[scala-spark]4. 函数式编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产日韩欧美中文字幕 | 性感美女在线观看 | 欧美真人性野外做爰 | 成年人看片网站 | 色噜噜av| 国产电影一区二区三区爱妃记 | 99久久久无码国产精品免费麻豆 | 韩国精品av | 日本美女一区 | 91精品国产综合久久久久久久 | 日本高清在线播放 | 日韩精品在线观看一区二区三区 | 人人干在线视频 | 欧美激情网址 | 人人妻人人澡人人爽久久av | 在线视频观看一区 | 免费黄色美女网站 | 日韩一级片在线 | 看毛片的网站 | 欧美天天性影院 | 国产精品久久久久久久专区 | 成人精品福利 | 成人午夜视频在线免费观看 | 天堂在线中文字幕 | 国语对白自拍 | 手机看片1024国产 | 韩日视频一区 | 欧美一级片播放 | 色多多污污 | 成人性免费视频 | 亚洲人人插 | 成人精品一区二区 | 日韩av看片 | 综合网在线观看 | 国产福利一区在线观看 | www.亚洲色图.com | 日韩亚洲在线观看 | 欧美日韩人妻精品一区在线 | 在线观看国产一区二区三区 | 国产视频日本 | 亚洲福利在线观看 | 国产精品久久久久久一区 | 久久人人爽爽人人爽人人片av | 亚洲图片另类小说 | 久久午夜福利电影 | v天堂在线观看 | 性高潮久久久久久 | 国产精品精品久久久 | 亚洲av无码一区二区三区在线 | 成人伊人 | 后宫秀女调教(高h,np) | 久久久久久影视 | 精品少妇av | 欧美视频免费看欧美视频 | 在线观看成人黄色 | 欧美精品人妻一区二区 | 一级影片在线观看 | 免费a网站 | 九九99久久 | 久久国产小视频 | 国产精品综合久久久久久 | 成人动漫在线观看视频 | 日韩黄色大片 | 成人精品综合 | 欧美午夜精品一区二区 | 国产福利网 | 亚洲精品aaaa| 咪咪色在线视频 | 欧美最猛性xxxx | 三级艳丽杨钰莹三级 | 神马午夜视频 | 欧美激情一区二区三区四区 | www.成人av.com| cao在线| 亚洲天堂色 | 粉嫩av在线| 毛片在哪看 | 韩国美女被c | 男女那个视频 | aaaaa级少妇高潮大片免费看 | av黄网站 | 四虎音影 | 校园春色综合 | 天堂中文在线资 | 看黄网站在线观看 | 国产精品毛片一区二区在线看舒淇 | 狠狠干天天操 | 在线观看三区 | 黄色网页免费观看 | 天堂视频中文在线 | 在线看av的网址 | 超碰在线公开免费 | 麻豆av电影网 | 亚洲不卡免费视频 | 久久久久久久久久久av | 金鱼妻日剧免费观看完整版全集 | 国产69精品久久久久久久 | 久久久久亚洲av成人片 | 一道本久在线中文字幕 |