新聞中心
這篇是Scala講座第七篇的第五部分,通過比較命令式、面向?qū)ο笫胶秃瘮?shù)式編程的例子來闡述了他們的特點。一句話,可以從兩個方面來說明“面向?qū)ο笫健焙汀昂瘮?shù)式”。

Scala講座 表:模塊層次與方法層次
#t#從分治法概念上來說,可以分為兩個軸上的問題,分別為模塊層次上的面向?qū)ο筮€是函數(shù)式,以及方法層次上的命令式還是函數(shù)式。從Java語言來說在模塊上是面向?qū)ο?,在方法上是命令型。從Haskell語言來說模塊和方法層次上都是函數(shù)式。
那么說到Scala語言,他在模塊層次上既可以用面向?qū)ο笥挚梢杂煤瘮?shù)式,在方法層次上既可以用命令又可以用函數(shù)式方法描述。例如可以在模塊層次上用面向?qū)ο?,在方法層次上用命令式來描述。筆者個人覺得,在模塊層次上用面向?qū)ο蠓绞絼t比較容易理解,在方法層次上用函數(shù)式則在很多情況下代碼會變得很簡單。
通過這次學(xué)習(xí),說明了一下很可能成為函數(shù)式編程的障礙的基本思考方法。Scala有趣的地方是,它不僅可以用函數(shù)式方法來編程,用傳統(tǒng)的面向?qū)ο蠛兔钍椒椒ㄒ残械奶攸c。應(yīng)此剛開始即使沒有“函數(shù)腦”也可以享受他的好處。
***盡筆者所能寫了一個將函數(shù)式和面向?qū)ο笫骄幊谭椒ɑ煸谝黄鸬某绦?。感覺上是使用了函數(shù)式的函數(shù),然后在上面蓋上類,然后再使用多態(tài)技術(shù)。這個程序雖然沒有實用性,但是可以感覺到由于有了Scala這類有趣的語言將來可能會誕生混合了“函數(shù)式”和“面向?qū)ο笫健碧攸c的創(chuàng)意或模式。
- case class Person(val name:String, val num:Int){
- def say = {
- "[" + num + "] "
- }
- def introduceMySelf = {
- "My name is " + name
- }
- }
- case class Sekaino(override val name:String, override val num:Int) extends Person(name, num){
- override def say = {
- num match {case 3 => "[Sir]"
- case _ => super.say
- }
- }
- }
- object Count{
- def main(args:Array[String]):Unit = {
- val persons = (1 until 5).map(x => factory(args(0), x))
- persons.foreach(show)
- }
- def show(person:Person) :Unit = {
- println(person.introduceMySelf)
- println(person.say)
- }
- def factory(name:String, num:Int) = {
- name match {
- case "nabe" => Sekaino(name, num)
- case _ => Person(name, num)
- }
- }
- }
順便說明一下,內(nèi)容為數(shù)一下執(zhí)行結(jié)果的個數(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é)束了。對于Scala語言的面向?qū)ο笫胶秃瘮?shù)式的特點,你是否了解了呢?
【編輯推薦】
- 萬物皆對象:介紹Scala對象
- Scala的泛型:***大的特性
- Scala的Trait:可以包含代碼的接口
- Scala的模式匹配和條件類
- Scala類:復(fù)數(shù)類,無參方法,繼承和覆蓋
網(wǎng)站標(biāo)題:Scala講座:面向?qū)ο蠛秃瘮?shù)式的特點總結(jié)
分享URL:http://www.5511xx.com/article/cohssci.html


咨詢
建站咨詢
