这篇是Scala讲座第七篇的第五部分,通过比较命令式、面向对象式和函数式编程的例子来阐述了他们的特点。一句话,可以从两个方面来说明“面向对象式”和“函数式”。
Scala讲座 表:模块层次与方法层次
#t#从分治法概念上来说,可以分为两个轴上的问题,分别为模块层次上的面向对象还是函数式,以及方法层次上的命令式还是函数式。从Java语言来说在模块上是面向对象,在方法上是命令型。从Haskell语言来说模块和方法层次上都是函数式。
那么说到Scala语言,他在模块层次上既可以用面向对象又可以用函数式,在方法层次上既可以用命令又可以用函数式方法描述。例如可以在模块层次上用面向对象,在方法层次上用命令式来描述。笔者个人觉得,在模块层次上用面向对象方式则比较容易理解,在方法层次上用函数式则在很多情况下代码会变得很简单。
通过这次学习,说明了一下很可能成为函数式编程的障碍的基本思考方法。Scala有趣的地方是,它不仅可以用函数式方法来编程,用传统的面向对象和命令式方法也行的特点。应此刚开始即使没有“函数脑”也可以享受他的好处。
***尽笔者所能写了一个将函数式和面向对象式编程方法混在一起的程序。感觉上是使用了函数式的函数,然后在上面盖上类,然后再使用多态技术。这个程序虽然没有实用性,但是可以感觉到由于有了Scala这类有趣的语言将来可能会诞生混合了“函数式”和“面向对象式”特点的创意或模式。
- 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)
- }
- }
- }
顺便说明一下,内容为数一下执行结果的个数,只有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讲座:面向对象和函数式的特点总结
文章链接:http://www.shufengxianlan.com/qtweb/news9/373709.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联