自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Scala講座:面向?qū)ο蠛秃瘮?shù)式的特點(diǎn)總結(jié)

開發(fā) 后端
本文繼續(xù)Scala講座第七篇的最后一部分內(nèi)容,總結(jié)了Scala中面向?qū)ο蠛秃瘮?shù)式的特點(diǎn),希望讀者們通過(guò)這一系列的講座會(huì)有所收獲。

這篇是Scala講座第七篇的第五部分,通過(guò)比較命令式、面向?qū)ο笫胶秃瘮?shù)式編程的例子來(lái)闡述了他們的特點(diǎn)。一句話,可以從兩個(gè)方面來(lái)說(shuō)明“面向?qū)ο笫健焙汀昂瘮?shù)式”。

Scala講座 表 

Scala講座 表:模塊層次與方法層次

#t#從分治法概念上來(lái)說(shuō),可以分為兩個(gè)軸上的問題,分別為模塊層次上的面向?qū)ο筮€是函數(shù)式,以及方法層次上的命令式還是函數(shù)式。從Java語(yǔ)言來(lái)說(shuō)在模塊上是面向?qū)ο?,在方法上是命令型。從Haskell語(yǔ)言來(lái)說(shuō)模塊和方法層次上都是函數(shù)式。

那么說(shuō)到Scala語(yǔ)言,他在模塊層次上既可以用面向?qū)ο笥挚梢杂煤瘮?shù)式,在方法層次上既可以用命令又可以用函數(shù)式方法描述。例如可以在模塊層次上用面向?qū)ο?,在方法層次上用命令式?lái)描述。筆者個(gè)人覺得,在模塊層次上用面向?qū)ο蠓绞絼t比較容易理解,在方法層次上用函數(shù)式則在很多情況下代碼會(huì)變得很簡(jiǎn)單。

通過(guò)這次學(xué)習(xí),說(shuō)明了一下很可能成為函數(shù)式編程的障礙的基本思考方法。Scala有趣的地方是,它不僅可以用函數(shù)式方法來(lái)編程,用傳統(tǒng)的面向?qū)ο蠛兔钍椒椒ㄒ残械奶攸c(diǎn)。應(yīng)此剛開始即使沒有“函數(shù)腦”也可以享受他的好處。

***盡筆者所能寫了一個(gè)將函數(shù)式和面向?qū)ο笫骄幊谭椒ɑ煸谝黄鸬某绦颉8杏X上是使用了函數(shù)式的函數(shù),然后在上面蓋上類,然后再使用多態(tài)技術(shù)。這個(gè)程序雖然沒有實(shí)用性,但是可以感覺到由于有了Scala這類有趣的語(yǔ)言將來(lái)可能會(huì)誕生混合了“函數(shù)式”和“面向?qū)ο笫健碧攸c(diǎn)的創(chuàng)意或模式。

  1. case class Person(val name:String, val num:Int){  
  2. def say = {  
  3. "[" + num + "] " 
  4. }  
  5. def introduceMySelf = {  
  6. "My name is " + name  
  7. }  
  8. }  
  9. case class Sekaino(override val name:String, override val num:Int) extends Person(name, num){  
  10. override def say = {  
  11. num match {case 3 => "[Sir]" 
  12. case _ => super.say  
  13. }  
  14. }  
  15. }  
  16. object Count{  
  17. def main(args:Array[String]):Unit = {  
  18. val persons = (1 until 5).map(x => factory(args(0), x))  
  19. persons.foreach(show)  
  20. }  
  21. def show(person:Person) :Unit = {  
  22. println(person.introduceMySelf)  
  23. println(person.say)  
  24. }  
  25. def factory(name:String, num:Int) = {  
  26. name match {  
  27. case "nabe" => Sekaino(name, num)  
  28. case _ => Person(name, num)  
  29. }  
  30. }  

順便說(shuō)明一下,內(nèi)容為數(shù)一下執(zhí)行結(jié)果的個(gè)數(shù),只有3才打印。

#p#

C:\ scalatest>scalac Count.scala

C:\scalatest>scala Count ushio

My name is ushio

[1]

My name is ushio

[2]

My name is ushio

[3]

My name is ushio

[4]

C:\scalatest>scala Count nabe

My name is nabe

[1]

My name is nabe

[2]

My name is nabe

[Sir]

My name is nabe

[4]

到這里,Scala講座第七篇的內(nèi)容終于結(jié)束了。對(duì)于Scala語(yǔ)言的面向?qū)ο笫胶秃瘮?shù)式的特點(diǎn),你是否了解了呢?

【編輯推薦】

  1. 萬(wàn)物皆對(duì)象:介紹Scala對(duì)象
  2. Scala的泛型:***大的特性
  3. Scala的Trait:可以包含代碼的接口
  4. Scala的模式匹配和條件類
  5. Scala類:復(fù)數(shù)類,無(wú)參方法,繼承和覆蓋
責(zé)任編輯:book05 來(lái)源: JavaEye博客
相關(guān)推薦

2009-07-08 16:10:24

Scala簡(jiǎn)介面向?qū)ο?/a>函數(shù)式

2009-12-11 10:44:00

Scala講座函數(shù) scala

2009-12-11 10:42:00

Scala講座類定義構(gòu)造函數(shù)

2009-09-27 15:23:00

Scala講座函數(shù)式編程Scala

2010-03-11 10:34:22

Scala

2009-06-16 17:09:17

Scala面向?qū)ο?/a>函數(shù)編程

2009-12-11 10:45:00

Scala講座類型系統(tǒng)功能

2009-09-24 09:38:00

Scala講座第一類對(duì)象scala

2011-06-28 11:06:16

Scala

2010-11-17 11:31:22

Scala基礎(chǔ)面向?qū)ο?/a>Scala

2009-09-24 09:41:00

Scala講座Scala

2009-09-24 09:28:00

Scala講座全局變量scala

2009-12-11 10:43:00

Scala講座操作符函數(shù)

2010-01-28 14:51:24

Scala后函數(shù)式

2013-11-26 10:14:15

面向?qū)ο?/a>函數(shù)式

2009-12-11 10:43:00

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

2020-10-26 12:27:18

對(duì)象編程函數(shù)式

2011-06-02 09:47:11

C語(yǔ)言重構(gòu)

2015-10-16 13:41:52

程序對(duì)象設(shè)計(jì)

2009-07-21 17:16:34

Scala函數(shù)式指令式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)