成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Scala學習:簡化客戶代碼

開發 后端
本文節選自Martin Odersky,Lex Spoon和Bill Venners所著,Regular翻譯的《Programming in Scala》的第九章。Scala是一種針對 JVM 將函數和面向對象技術組合在一起的編程語言。

9.2 前一個例子演示了高階函數能在你實現API的時候幫助減少代碼重復。高階函數的另一個重要應用是把它們放在API里使客戶代碼更簡潔。Scala的集合類型的特定用途循環方法提供了一個很好的例子。這些特定用途循環方法被定義在特質Iterable中,被List,Set,Array,還有Map擴展。很多已經在第三章的表格3.1中列了出來。不過現在請注意其中的一個例子來看看為什么這些方法如此有用。

51CTO編輯推薦:Scala編程語言專題

考慮exists,一個判斷傳入的值是否包含在集合中的方法。當然你也可以初始化一個var為假,循環遍歷集合類型,檢查每個元素,并且如果你找到了要尋找的就把var設置為真,通過這樣的方式尋找元素。以下是使用了這種方式的方法去判斷是否傳入的List包含了負數的例子:

  1. def containsNeg(nums: List[Int]): Boolean = {  
  2.  var exists = false 
  3.  for (num < - nums)  
  4.   if (num <  0)  
  5.    exists = true 
  6.  exists  
  7. }  
假如你在解釋器里定義了這個方法,你就可以這樣調用:

  1. scala> containsNeg(List(1234))  
  2. res0: Boolean = false 
  3. scala> containsNeg(List(123, -4))  
  4. res1: Boolean = true 
不過更簡潔的定義這個方法的方式是通過在傳入的List上調用高階函數exists,如:

  1. def containsNeg(nums: List[Int]) = nums.exists(_ <  0)  
這個版本的containsNeg能產生和前面的那個一樣的結果:

  1. scala> containsNeg(Nil)  
  2. res2: Boolean = false 
  3. scala> containsNeg(List(01, -2))  
  4. res3: Boolean = true 
exists方法代表了控制抽象。是Scala庫提供的特定用途循環架構而不是像while或for那樣內建在Scala語言里的。上節中,高階函數,filesMatching在對象FileMatcher的實現中減少了代碼重復。exists方法提供了類似的好處,但因為exists是公開在Scala的集合類型API里的,所以它減少的是API的客戶代碼中的重復。exists不存在的話,如果你想要寫一個containsOdd方法,檢測列表是否包含了奇數,你或許會寫成這樣:

  1. def containsOdd(nums: List[Int]): Boolean = {  
  2.  var exists = false 
  3.  for (num < - nums)  
  4.   if (num % 2 == 1)  
  5.    exists = true 
  6.  exists  
  7. }  
若你比較了containsNeg和containsOdd的函數體,你會發現除了if表達式之外,其它東西都是重復的。使用exists,你就可以這么寫:

  1. def containsOdd(nums: List[Int]) = nums.exists(_ % 2 == 1
這個版本的代碼體再一次與相應的containsNeg方法的保持一致(使用了exists的版本),除了搜索的條件不同。然而代碼重復的量卻少得多,因為所有的循環架構都被提取成exists方法本身了。

Scala的標準庫中還有許多其他循環方法。如果你能發現使用它們的機會,那么像exists一樣,它們經常能縮短你的代碼。

【相關閱讀】

  1. 減少Scala中的代碼重復
  2. Scala:尾遞歸的跟蹤調用及其局限
  3. Scala允許的重復參數
  4. 學習Scala的閉包
  5. Scala的偏應用函數

責任編輯:book05 來源: Artima
相關推薦

2009-06-22 14:26:12

ScalaXML對象

2009-02-05 17:28:01

ScalaFriendFeedXML

2010-08-23 10:59:02

SAP金融服務CRM

2009-11-16 17:04:46

Inside Scal

2009-07-22 07:43:00

Scala閉包

2009-07-21 16:58:31

Scala變量范圍

2021-03-10 09:20:31

await代碼前端

2017-04-19 08:47:42

AsyncJavascript異步代碼

2009-09-28 11:42:21

KestrelScala

2009-07-22 07:45:00

Scala代碼重復

2009-07-08 15:35:18

Case類Scala

2009-07-22 07:57:00

ScalaCurry化函數

2009-07-22 09:02:45

Scala組合繼承

2011-05-07 14:53:49

2009-07-06 15:20:30

JSP表達式

2010-05-24 18:05:43

惠普云計算IT管理

2010-05-25 15:07:37

惠普云計算簡化

2014-12-25 13:18:39

2009-07-22 07:50:00

Scala傳名參數

2009-09-28 10:26:12

Scala代碼實例Kestrel
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人在线一区二区 | 二区三区视频 | 日韩无 | 国产这里只有精品 | 毛片一级黄色 | 欧美日韩亚洲国产 | 亚洲成人精品国产 | 99精品欧美一区二区三区 | 欧美精品乱码久久久久久按摩 | 国产一区二区在线视频 | 波多野吉衣在线播放 | 国产日韩欧美一区二区 | 国产精品一区二区免费 | 久久久久久成人 | 在线一区| 色毛片 | 亚洲精品乱码久久久久久久久 | 欧美日韩亚洲一区 | 亚洲成人www | 日日摸夜夜添夜夜添精品视频 | 精品一区二区在线观看 | 九色综合网| 中文字幕 国产 | 黄色成人免费看 | 欧美一区2区三区4区公司二百 | 国产精品99一区二区 | 精品国产1区2区3区 在线国产视频 | 久久国产视频播放 | 真人女人一级毛片免费播放 | 欧美久久一区二区三区 | 国产欧美精品区一区二区三区 | 99re在线观看 | www.中文字幕.com | 欧美日韩视频在线播放 | 日韩免费网 | 国产精品一区二区三区在线 | 欧美精品一区久久 | 国产精品一区二区三 | 在线观看www| 精品亚洲一区二区三区四区五区 | 久久国产精品视频免费看 |