该程序通过一段斐波那契数列的计算,比较一下Scala的函数式编程与java的面向对象的不同。
不多说了上代码。
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ // "_"符号相当于java的* 比如是java.util.* import scala.actors._ import scala.actors.Actor._ import scala.util.Random import java.util.Date object Actors{ def main(args: Array[String]){ val actors = new Array[Actor](250000) for(i <- 0 to 249999){ //actor循环,高并发模型 actors(i) = actor{ loop{ react{ case fibNum: Int => calculate(fibNum, i) } } } } val random = new Random() for(a <- actors){ a ! random.nextInt(25) } } //执行打印 def calculate(fibNum: Int, i: Int) = { val answer = fibonacci(fibNum) if((i + 1) % 1000 == 0){ val idPlusOne = i + 1 println("The " + fibNum + "th fibonacci number is " + answer + " (thread: " + idPlusOne + ")") } if((i + 1) % 250000 == 0){ System.exit(0) } } //斐波那契数列匹配,是不是比java定义同样的方法简单多了?连变量都不要了。 def fibonacci( n: Int): Int = n match { case 0 => 0 case 1 => 1 case _ => fibonacci(n -1) + fibonacci(n - 2) } }
再看看实现同样功能的java代码吧
import java.util.Date; import java.util.Random; public class JavaThreads extends Thread{ private static int THREAD_COUNT = 250000; private int fibNum; private int jid; public JavaThreads(int id, int fibNum){ this.jid = id; this.fibNum = fibNum; } public void run(){ int answer = fibonacci(fibNum); if(this.jid % 1000 == 0){ System.out.println("The " + fibNum + "th fibonacci number is " + answer + " (thread: " + this.jid + ")"); } } private int fibonacci(int i){ if(i < 2){ return i;} return fibonacci(i - 1) + fibonacci(i - 2); } public int getJid(){ return jid; } public void setJid(int jid){ this.jid = jid; } public int getFibNum(){ return fibNum; } public void setFibNum(int fibNum){ this.fibNum = fibNum; } public static void main(String args[]){ Date beginDate = new Date(); long memoryBegin = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); JavaThreads threads[] = new JavaThreads[THREAD_COUNT]; Random random = new Random(); for(int i = 0; i < THREAD_COUNT; i++){ threads[i] = new JavaThreads(i, random.nextInt(25)); } for(JavaThreads thread : threads){ thread.start(); } long memoryEnd = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); Date endDate = new Date(); System.out.println("Completed in " + ((endDate.getTime() - beginDate.getTime())/1000) + " seconds"); System.out.println("Used memory: " + (memoryEnd - memoryBegin)); } }
相信上面的java代码大家很熟悉了。该段demo其实展现了scala很多特性
比如:
1、object Actors {} 相当与 java的单例设计.没有过多的说明只是定义类的类型不一样,省去了java中构造私有的步骤达到同样的功能。
2、scala由于是基于JVM的,可以调用java类库. 代码中 import java.util.Date ;
3、val变量相当于java中的常量了(貌似是众多函数式编程语言的使用规范).var可以是变量,但用的少。
4、循环结构简洁、易于明白脱离了数组下标所带来的麻烦,for(i <- 0 to 249999).
5、actors高并发模型是借鉴Erlang,在公司的时候、服务器后台使用的比较多。
6、类型自动推测。把函数当返回值使用。
说实话,scala的特点真的蛮多的.特别是和java放在一起。相信你即使没有学过scala,只要有java基础一定看的出大概了。怎么样心动了么?
发表评论
-
Scala + Twitter = Scitter(scala代码学习第15天)
2011-04-08 09:11 865Twitter 迅速占领了 Interne ... -
面向 Java 开发人员的 Scala 指南: Scala 和 servlet(scala代码学习第十一天)
2011-04-02 07:40 732Scala 显然是一门有趣的语言,很适合体现语言理论和创新方面 ... -
构建计算器,第 3 部分将 Scala 解析器组合子和 case 类结合起来(scala代码学习第十天)
2011-04-01 09:25 950欢迎勇于探索的读者回到我们的系列文章中!本月继续探索 Scal ... -
scala代码学习构建计算器,第2 部分(代码学习第九天)
2011-03-31 10:53 808回忆一下我们的英雄所处的困境:在试图创建一个 DSL(这里只不 ... -
Scala构建计算器,第1 部分(代码学习第8天)
2011-03-30 11:59 1193特定于领域的语言 可能您无法(或没有时间)承受来自于您的项目 ... -
scala包和访问修饰符(代码学习第七天)
2011-03-29 15:51 1615系列的过程中我遗漏了 ... -
实现继承(代码学习第五天)
2011-03-26 10:13 963近十几年来,面向对象语言设计的要素一直是继承的核心。不支持继承 ... -
关于特征和行为(代码学习第四天)
2011-03-25 09:38 698著名科学家、研究学者 ... -
Scala 控制结构内部揭密(scala代码学习第三天)
2011-03-24 09:15 1304迄今为止,在此 系列 ... -
面向 Java 开发人员的 Scala 指南: 类操作(代码学习第2天)
2011-03-22 19:06 740第一天中只是些简单应用 ,您只是稍微了解了一些 Scala 语 ... -
programming in scala 2nd代码学习(第一天)
2011-03-22 18:42 933近来没事,拿出了原先学习scala的代码 书中代码噢、拿出自己 ... -
scalatra web框架快速搭建(官方使用文档)
2011-03-21 22:42 2513昨天写了个sbt构建scala项目的文章,就是为了今天的sca ... -
A build tool for Scala(simple-build-tool) sbt安装指南
2011-03-20 22:49 2201今天有位写框架的大哥叫我学一学scalatra框架,找了 ... -
Java 开发人员的 Scala 指南: 面向对象的函数编程
2011-03-20 11:59 1035函数概念 开始之前, ...
相关推荐
Scala作为一门集合了面向对象编程和函数式编程特点的语言,在这一领域尤其受到重视。在Packt出版的《Scala Functional Programming Patterns》一书中,作者Atul S. Khot详细探讨了Scala中实现高效函数式编程的模式。...
Master the fundamentals of Scala and understand its emphasis on functional programming that sets it apart from Java. This book will help you translate what you already know in Java to Scala to start ...
Scala Functional Programming Patterns 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请...
【标题】"Scala集合(二)Java开发Java经验技巧共10页" 指的是一份关于Scala集合和Java开发技巧的文档,该文档共包含10页内容,可能是详细讲解了如何在Scala编程中使用集合,并结合了Java开发的经验和技巧。Scala是...
Its familiar syntax and transparent interoperability with existing Java libraries make Scala a great place to start learning FP., Functional Programming in Scala is a serious tutorial for programmers...
本示例着重讲解如何在Java和Scala之间进行互调用,这是基于Maven构建系统的。Maven是Apache开发的项目管理工具,它可以帮助开发者管理项目的构建、依赖关系以及文档的生成。在Java和Scala的混合开发环境中,Maven...
标题“Scala From a Functional Programming Perspective.pdf”所指的知识点主要围绕Scala编程语言及其函数式编程特性。Scala是一种现代编程语言,它结合了面向对象编程和函数式编程的特性。面向对象编程(OOP)是...
在Java项目中使用Scala,通常被称为Java和Scala的混编。这种混编允许开发团队在已有的Java项目中逐渐引入Scala代码,以利用其优势,同时保持与现有Java代码的兼容性。在实际应用中,可能会在服务端逻辑或者特定组件...
并发与分布式两股浪潮令FP大行其道。然而大多数开发者仍然停留在OOP范式的阶段,饱受可变状态之苦。作为一门将OOP与FP紧密结合的JVM语言,Scala将在这个OOP到FP的范式过渡阶段起到其独有的承上启下作用。
1. Scala语言特性:Scala是一种针对Java虚拟机(JVM)的编程语言,它将面向对象和函数式编程的特性无缝融合,旨在提供一种简洁、优雅且类型安全的方式来表达常见的编程模式。其目标是提高Java程序员的编程效率。 2....
赠送jar包:scala-java8-compat_2.11-0.7.0.jar; 赠送原API文档:scala-java8-compat_2.11-0.7.0-javadoc.jar; 赠送源代码:scala-java8-compat_2.11-0.7.0-sources.jar; 赠送Maven依赖信息文件:scala-java8-...
Java、Groovy、Scala和Kotlin是四种在Java平台上广泛使用的编程语言,它们各自具有独特的特点和优势。这里我们将深入探讨这四种语言的核心特性,并对比它们在实际开发中的应用。 首先,Java作为最古老的成员,自...
赠送jar包:scala-java8-compat_2.11-0.7.0.jar; 赠送原API文档:scala-java8-compat_2.11-0.7.0-javadoc.jar; 赠送源代码:scala-java8-compat_2.11-0.7.0-sources.jar; 赠送Maven依赖信息文件:scala-java8-...
Scala到Java 用Scala编写的简单工具,揭示了Scala编译器的奥秘。 从StdIn读取scala代码,并将其反编译的Java版本写入StdOut。 用法 确保您已安装Java 1.8和Maven 检出项目 在项目目录中调用mvn clean package 。 ...
《Functional Programming in Scala》与《Scala for the Impatient》是两本关于Scala编程语言的重要书籍,专注于函数式编程思想和Scala语言的深入学习。Scala是一种多范式编程语言,结合了面向对象和函数式编程的...
**Scala集合与Java开发:深度解析与经验技巧** 在编程世界中,Scala和Java是两种广泛应用的编程语言,尤其在企业级应用开发中占据重要地位。Scala,作为一门多范式编程语言,融合了面向对象和函数式编程的特性,为...
在现代软件开发中,Java和Scala是两种广泛使用的编程语言。它们各有特色,Java以其稳定性和广泛的社区支持而著名,Scala则以其强大的函数式编程特性及对Java虚拟机(JVM)的无缝集成受到青睐。当一个项目中同时包含...