亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Scala的函數式風格是怎樣的

發布時間:2021-12-09 09:37:38 來源:億速云 閱讀:168 作者:iii 欄目:編程語言

這篇文章主要介紹“Scala的函數式風格是怎樣的”,在日常操作中,相信很多人在Scala的函數式風格是怎樣的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Scala的函數式風格是怎樣的”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

如果你來自于指令式的背景,如Java,C++,或者C#,你或許認為var是很正統的變量而val是一種特殊類型的變量。相反,如果你來自于函數式背景,如Haskell,OCamel,或Erlang,你或許認為val是一種正統的變量而var有褻瀆神靈的血統。然而在Scala看來,val和var只不過是你工具箱里兩種不同的工具。它們都很有用,沒有一個天生是魔鬼。Scala鼓勵你學習val,但也不會責怪你對給定的工作選擇最有效的工具。盡管或許你同意這種平衡的哲學,你或許仍然發現***次理解如何從你的代碼中去掉var是很挑戰的事情。
考慮下面這個改自于第2章的while循環例子,它使用了var并因此屬于指令式風格:

def printArgs(args: Array[String]): Unit = {   var i = 0  while (i < args.length) {    println(args(i))    i += 1   }  }

你可以通過去掉var的辦法把這個代碼變得更函數式風格,例如,像這樣:

def printArgs(args: Array[String]): Unit = {   for (arg <- args)    println(arg)  }

或這樣:

def printArgs(args: Array[String]): Unit = {   args.foreach(println)  }

這個例子演示了減少使用var的一個好處。重構后(更函數式)的代碼比原來(更指令式)的代碼更簡潔,明白,也更少機會犯錯。Scala鼓勵函數式風格的原因,實際上也就是因為函數式風格可以幫助你寫出更易讀懂,更不容易犯錯的代碼。

當然,你可以走得更遠。重構后的printArgs方法并不是純函數式的,因為它有副作用——本例中,其副作用是打印到標準輸出流。函數有副作用的馬腳就是結果類型為Unit。如果某個函數不返回任何有用的值,就是說其結果類型為Unit,那么那個函數***能讓世界有點兒變化的辦法就是通過某種副作用。更函數式的方式應該是定義對需打印的arg進行格式化的方法,但是僅返回格式化之后的字串,如代碼3.9所示:

def formatArgs(args: Array[String]) = args.mkString("\n")

代碼 3.9 沒有副作用或var的函數

現在才是真正函數式風格的了:滿眼看不到副作用或者var。能在任何可枚舉的集合類型(包括數組,列表,集和映射)上調用的mkString方法,返回由每個數組元素調用toString產生結果組成的字串,以傳入字串間隔。因此如果args包含了三個元素,"zero","one"和"two",formatArgs將返回"zero\none\ntwo"。當然,這個函數并不像printArgs方法那樣實際打印輸出,但可以簡單地把它的結果傳遞給println來實現:

println(formatArgs(args))

每個有用的程序都可能有某種形式的副作用,因為否則就不可能對外部世界提供什么值。偏好于無副作用的方法可以鼓勵你設計副作用代碼最少化了的程序。這種方式的好處之一是可以有助于使你的程序更容易測試。舉例來說,要測試本節之前給出三段printArgs方法的任一個,你將需要重定義println,捕獲傳遞給它的輸出,并確信這是你希望的。相反,你可以通過檢查結果來測試formatArgs:

val res = formatArgs(Array("zero", "one", "two"))  assert(res == "zero\none\ntwo")

Scala的assert方法檢查傳入的Boolean并且如果是假,拋出AssertionError。如果傳入的Boolean是真,assert只是靜靜地返回。

雖如此說,不過請牢記在心:不管是var還是副作用都不是天生邪惡的。Scala不是強迫你用函數式風格編任何東西的純函數式語言。它是一種指令式/函數式混合的語言。你或許發現在某些情況下指令式風格更符合你手中的問題,在這時候你不應該對使用它猶豫不決。

Scala程序員的平衡感

崇尚val,不可變對象和沒有副作用的方法。

首先想到它們。只有在特定需要和判斷之后才選擇var,可變對象和有副作用的方法。

到此,關于“Scala的函數式風格是怎樣的”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岚皋县| 开阳县| 江门市| 日照市| 福泉市| 呼图壁县| 河西区| 赣榆县| 桐乡市| 青铜峡市| 浑源县| 呼图壁县| 大新县| 郎溪县| 长宁区| 安国市| 临猗县| 北碚区| 青浦区| 金堂县| 高雄市| 瑞金市| 聂拉木县| 衡山县| 镇宁| 巴彦县| 莒南县| 息烽县| 威信县| 突泉县| 金华市| 通河县| 沧州市| 苍山县| 汾阳市| 彩票| 金塔县| 石泉县| 隆子县| 来凤县| 宁波市|