成人免费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

2009-11-16 17:04:46

Inside Scal

2010-08-23 10:59:02

SAP金融服務CRM

2009-07-21 16:58:31

Scala變量范圍

2009-07-22 07:43:00

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-22 09:02:45

Scala組合繼承

2009-07-08 15:35:18

Case類Scala

2009-07-22 07:57:00

ScalaCurry化函數

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

2011-05-07 14:53:49

2009-09-28 10:26:12

Scala代碼實例Kestrel

2009-07-22 09:22:20

Scala工廠對象
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲在线 | 国产露脸国语对白在线 | 亚洲国产精品成人久久久 | 国产精品2区| 日本视频免费 | 欧美一区二区在线播放 | 国产三级日本三级 | 国产原创视频 | 99国内精品 | 日韩一区二区黄色片 | 精品日韩 | 国产精品123区 | 亚洲码欧美码一区二区三区 | 99re在线视频| 亚洲精品成人av久久 | 四虎av电影 | 激情综合五月 | 99re国产视频| 国产精品久久久久久妇女 | 亚洲欧美日韩系列 | 综合色影院 | 日本在线综合 | 在线国产一区二区 | wwwxxx日本在线观看 | 精品一区二区久久久久久久网站 | 欧美jizzhd精品欧美巨大免费 | 日韩日韩日韩日韩日韩日韩日韩 | 国产欧美精品一区二区 | 一级在线 | 高清视频一区二区三区 | 日韩在线视频一区 | 夜夜夜久久| 久久成人av电影 | 欧美日韩国产综合在线 | 在线成人av | 喷潮网站| 久久久久久国产 | 免费看91 | 岛国午夜 | 中文字幕欧美在线观看 | 人人爽人人爽 |