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

Scala講座:編程的思考方法

開發 后端
本文繼續Scala講座的第三部分內容,即編程的思考方法,希望大家喜歡。

這篇是Scala講座第七篇的第三部分,總括了函數式編程的思考方法。

在進行什么編程的時候,你用什么方法來思考呢?用命令是方法來考慮的話,一定是考慮“首先有一個變量,然后一邊循環一邊判斷一下這樣的條件,接著進行這種操作···”這樣的操作步驟吧。

面向對象式方法來考慮時,一定是先考慮“程序中出現的這個對象里有什么東西(數據)呀?”,然后再給對象分配 “動作”(方法)吧。整體印象應該是,“對象”們互相分配好自己的工作,對象自己只做自己的工作其他的工作交給其他對象來完成,“對象”們互相合作來完成一個處理吧。即使是面向對象的情況下,對于一般語言來說,對象方法內也是用命令方式來實現的。

那么,函數式編程該是怎樣的景象呢?函數式編程是“將函數應用在值或者對象上”這種思考方法,也就是函數只是將值或者對象轉換成不同的別的東西。這樣說,可能函數式方法還是很難在讀者腦中浮現,那么就以“命令型”和“函數式”兩種類型的例子為基礎進行闡述吧。

[Scala講座]題目:架子上的蘋果

題目內容為模擬“架子上有100個蘋果,一個個剝皮吃掉***一個也沒有了。“這個過程。運行結果的樣子因該如下所示:

  1. > scala AppleCounter  
  2. 99 apples on the wall.  
  3. 98 apples on the wall.  
  4. :  
  5. 2 apples on the wall.  
  6. 1 apple on the wall.  
  7. no apple on the wall. 
當蘋果只有1或0個的時候,由于不是復數情況,所以處理方法有所不同。先用命令方式來實現一下。
  1. object AppleCounter{  
  2. def main(args:Array[String]):Unit = {  
  3. var appleList:List[String] = List()  
  4. for(i <- 1 to 100) {  
  5. var counter = 100 -i  
  6. if (counter == 1) appleList = appleList ::: List("1 apple on the wall.")  
  7. if (counter == 0) appleList = appleList ::: List("no apple on the wall.")  
  8. if (counter != 1 && counter != 0)  
  9. appleList = appleList ::: List(counter + " apples on the wall.")  
  10. }  
  11. appleList.foreach(x => println(x))  
  12. }  
首先準備好列表變量appleList,接著做100次循環。循環中用變量counter來存放當前所剩的蘋果數,并根據該數字向例表末尾加入描述文本,其中對于1個和0個的情況進行特殊處理。***使用appleList的foreach方法對每一列表成員進行打印操作。題外話,由于Scala是函數式+面向對象語言,所以能夠以這種命令式方法來編程,這對于不熟悉函數式編程的用戶來說也還真不錯。
好了,這次用函數式的方法來重新實現一下同樣的邏輯。那么該怎樣考慮函數式的實現呢?下面是實現例子。
  1. object AppleCounter {  
  2. def main(args:Array[String]):Unit = {val appleList = (0 until 100).reverse.map(x => x match {  
  3. case 1 => "1 apple on the wall." 
  4. case 0 => "no apple on the wall." 
  5. case _ => x + " apples on the wall." 
  6. })  
  7. appleList.foreach(x => println(x))  
  8. }  
這里不是想說明“程序短了不少啊···”,而是希望大家明白思考方法的不同之處(不過這里并沒有聲明變量appleList的類型,能夠進行如此復雜的類型推斷也真是挺厲害的呀!)。編寫這段程序的時候,我一開始就沒有考慮到循環這個概念。比起循環,我考慮的是如何將函數用在數字列表變量上。首先不是邏輯,而是創建用于執行函數的對象(這里是數字列表),然后考慮選擇哪種函數來執行。
首先考慮創建如下的列表對象。
  1. List(999897, .... 210
這個通過(0 until 100).reverse部分來實現。接著對于這個列表的一個個數字,考慮返回數字相對應字符串的函數。對應部分如下
  1. (上面的列表).map(x => x match {  
  2. case 1 => "1 apple on the wall." 
  3. case 0 => "no apple on the wall." 
  4. case _ => x + " apples on the wall." 
  5. }) 
用Scala進行像樣的函數式編程時,map是最重要的函數之一。也就是,對于列表中的每個元素用map函數傳進來的函數執行一下,然后返回他的結果列表。這里傳遞給map函數的參數(函數對象)內容是:對于1返回1 apple on the wall.;對于0返回no apple on the wall;其他情況比如22,返回22 apples on the wall。根據該內容,map函數返回如下列表
  1. List("99 apples on the wall.""98 apples on the wall.", …"no apple on the wall."

***一行類似于命令式編程,對于例表appleList用foreach方法循環遍歷,并用foreach傳進的函數打印列表所有的元素,然后程序結束。
函數map不僅在List類中有,其他很多類中也有。

Scala講座 圖:map函數概念圖

Scala講座 圖:map函數概念圖 

函數式語言中List具有強大的功能,這里再一次強調,函數式編程不是考慮如何循環,而是首先考慮創建作為操作源的列表,然后考慮將怎樣的函數適用于列表中的元素。由于使用如此風格的編程方式,所以就不需要保存用于循環的計數器呀,臨時變量什么的了。

Scala講座到這里,第七篇第三部分內容就結束了。

【編輯推薦】

  1. 萬物皆對象:介紹Scala對象
  2. Scala的泛型:***大的特性
  3. Scala的Trait:可以包含代碼的接口
  4. Scala的模式匹配和條件類
  5. Scala類:復數類,無參方法,繼承和覆蓋
責任編輯:book05 來源: JavaEye博客
相關推薦

2009-09-27 15:23:00

Scala講座函數式編程Scala

2009-12-11 10:44:00

Scala講座函數 scala

2009-09-24 09:28:00

Scala講座全局變量scala

2009-08-27 10:06:15

Scala的構造方法

2009-12-11 10:42:00

Scala講座類定義構造函數

2009-12-11 10:45:00

Scala講座類型系統功能

2010-09-14 15:34:41

Scala

2009-09-27 15:29:00

Scala講座面向對象Scala

2009-12-11 10:43:00

Scala講座混入多重繼承類型層次

2009-12-11 10:43:00

Scala講座操作符函數

2010-11-17 11:31:22

Scala基礎面向對象Scala

2013-08-20 09:23:06

Scala遞歸

2013-11-11 09:26:50

編程思考

2013-09-12 15:51:04

編程文化垃圾代碼移動開發

2010-09-14 13:22:17

Scala編程指南Scala

2009-07-21 12:18:37

ScalaRational對象toString

2013-04-18 09:29:02

編程語言編程

2009-02-06 09:08:04

Scala函數語言輕量級

2010-07-26 08:35:06

ScalaJava

2010-09-14 14:28:58

Scala
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一区二 | 亚洲视频在线观看 | 少妇淫片aaaaa毛片叫床爽 | 久久久123 | 综合国产 | 看av网| 亚洲高清av在线 | 欧美大片一区 | 国产福利在线视频 | 国产成人99久久亚洲综合精品 | 伊人免费网| 日韩毛片| 成人h片在线观看 | 色综合久久久久 | 毛片网站免费观看 | 久草中文在线 | 国产高清在线精品 | 国产精品视频在线播放 | 亚洲成人天堂 | www.99热这里只有精品 | 国产精品久久久久久久久久久久久 | 久久精品一区 | 国产黄视频在线播放 | 亚洲三级av| 激情的网站 | 欧美激情在线播放 | 亚洲xx在线 | 国产精品国产成人国产三级 | 国产黄色大片 | 国产区精品在线观看 | 成人免费看黄网站在线观看 | 国产一区二区影院 | 国产99久久 | 岛国av免费观看 | 国产日韩精品久久 | 国产精品久久久久久久久久免费看 | av在线免费观看网址 | 九九av| 国产精品不卡一区 | 成人精品视频 | 日韩一区av|