本文继续Scala讲座第七篇的最后一部分内容,总结了Scala中面向对象和函数式的特点,希望读者们通过这一系列的讲座会有所收获。
这篇是Scala讲座第七篇的第五部分,经过比较指令式、面向目标式和函数式编程的例子来论述了他们的特色。一句话,能够从两个方面来阐明“面向目标式”和“函数式”。
Scala讲座 表:模块层次与办法层次
#t#从分治法概念上来说,能够分为两个轴上的问题,分别为模块层次上的面向目标仍是函数式,以及办法层次上的指令式仍是函数式。从Java言语来说在模块上是面向目标,在办法上是指令型。从Haskell言语来说模块和办法层次上都是函数式。
那么提到Scala言语,他在模块层次上既能够用面向目标又能够用函数式,在办法层次上既能够用指令又能够用函数式办法描绘。例如能够在模块层次上用面向目标,在办法层次上用指令式来描绘。笔者个人觉得,在模块层次上用面向目标办法则比较简单了解,在办法层次上用函数式则在许多情况下代码会变得很简单。
经过这次学习,阐明晰一下很可能成为函数式编程的妨碍的根本考虑办法。Scala风趣的当地是,它不仅能够用函数式办法来编程,用传统的面向目标和指令式办法也行的特色。应此刚开始即便没有“函数脑”也能够享用他的优点。
***尽笔者所能写了一个将函数式和面向目标式编程办法混在一同的程序。感觉上是运用了函数式的函数,然后在上面盖上类,然后再运用多态技能。这个程序尽管没有实用性,可是能够感觉到因为有了Scala这类风趣的言语将来可能会诞生混合了“函数式”和“面向目标式”特色的构思或形式。
- caseclassPerson(valname:String,valnum:Int){
- defsay={
- "["+num+"]"
- }
- defintroduceMySelf={
- "Mynameis"+name
- }
- }
- caseclassSekaino(overridevalname:String,overridevalnum:Int)extendsPerson(name,num){
- overridedefsay={
- nummatch{case3=>"[Sir]"
- case_=>super.say
- }
- }
- }
- objectCount{
- defmain(args:Array[String]):Unit={
- valpersons=(1until5).map(x=>factory(args(0),x))
- persons.foreach(show)
- }
- defshow(person:Person):Unit={
- println(person.introduceMySelf)
- println(person.say)
- }
- deffactory(name:String,num:Int)={
- namematch{
- case"nabe"=>Sekaino(name,num)
- case_=>Person(name,num)
- }
- }
- }
趁便阐明一下,内容为数一下履行成果的个数,只要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讲座第七篇的内容总算完毕了。关于Scala言语的面向目标式和函数式的特色,你是否了解了呢?
【修改引荐】
- 万物皆目标:介绍Scala目标
- Scala的泛型:***大的特性
- Scala的Trait:能够包括代码的接口
- Scala的形式匹配和条件类
- Scala类:复数类,无参办法,承继和掩盖