`
lw9956164
  • 浏览: 27227 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

Scala functional style deferent from java OOP(特点)

阅读更多

该程序通过一段斐波那契数列的计算,比较一下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 Functional Programming Patterns

    Scala作为一门集合了面向对象编程和函数式编程特点的语言,在这一领域尤其受到重视。在Packt出版的《Scala Functional Programming Patterns》一书中,作者Atul S. Khot详细探讨了Scala中实现高效函数式编程的模式。...

    2018 Scala for Java Developers: A Practical Primer

    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

    Scala Functional Programming Patterns 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请...

    Scala集合(二)Java开发Java经验技巧共10页

    【标题】"Scala集合(二)Java开发Java经验技巧共10页" 指的是一份关于Scala集合和Java开发技巧的文档,该文档共包含10页内容,可能是详细讲解了如何在Scala编程中使用集合,并结合了Java开发的经验和技巧。Scala是...

    Functional Programming in 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...

    基于maven的scala与java相互调用的简单实例

    本示例着重讲解如何在Java和Scala之间进行互调用,这是基于Maven构建系统的。Maven是Apache开发的项目管理工具,它可以帮助开发者管理项目的构建、依赖关系以及文档的生成。在Java和Scala的混合开发环境中,Maven...

    Scala From a Functional Programming Perspective.pdf

    标题“Scala From a Functional Programming Perspective.pdf”所指的知识点主要围绕Scala编程语言及其函数式编程特性。Scala是一种现代编程语言,它结合了面向对象编程和函数式编程的特性。面向对象编程(OOP)是...

    SpringBoot + SpringData Jpa + Scala + Mysql(java+Scala混编)

    在Java项目中使用Scala,通常被称为Java和Scala的混编。这种混编允许开发团队在已有的Java项目中逐渐引入Scala代码,以利用其优势,同时保持与现有Java代码的兼容性。在实际应用中,可能会在服务端逻辑或者特定组件...

    Scala—OOP到FP的变迁

    并发与分布式两股浪潮令FP大行其道。然而大多数开发者仍然停留在OOP范式的阶段,饱受可变状态之苦。作为一门将OOP与FP紧密结合的JVM语言,Scala将在这个OOP到FP的范式过渡阶段起到其独有的承上启下作用。

    SCALA程序设计-JAVA虚拟机多核编程实战

    1. Scala语言特性:Scala是一种针对Java虚拟机(JVM)的编程语言,它将面向对象和函数式编程的特性无缝融合,旨在提供一种简洁、优雅且类型安全的方式来表达常见的编程模式。其目标是提高Java程序员的编程效率。 2....

    scala-java8-compat_2.11-0.7.0-API文档-中英对照版.zip

    赠送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-...

    JGSK, Java,Groovy,Scala,Kotlin 四种语言的特点对比.zip

    Java、Groovy、Scala和Kotlin是四种在Java平台上广泛使用的编程语言,它们各自具有独特的特点和优势。这里我们将深入探讨这四种语言的核心特性,并对比它们在实际开发中的应用。 首先,Java作为最古老的成员,自...

    scala-java8-compat_2.11-0.7.0-API文档-中文版.zip

    赠送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-to-java:将Scala代码转换为Java代码的命令行工具

    Scala到Java 用Scala编写的简单工具,揭示了Scala编译器的奥秘。 从StdIn读取scala代码,并将其反编译的Java版本写入StdOut。 用法 确保您已安装Java 1.8和Maven 检出项目 在项目目录中调用mvn clean package 。 ...

    functional programming in scala and impatient.pdf

    《Functional Programming in Scala》与《Scala for the Impatient》是两本关于Scala编程语言的重要书籍,专注于函数式编程思想和Scala语言的深入学习。Scala是一种多范式编程语言,结合了面向对象和函数式编程的...

    Scala集合Java开发Java经验技巧共9页.pdf

    **Scala集合与Java开发:深度解析与经验技巧** 在编程世界中,Scala和Java是两种广泛应用的编程语言,尤其在企业级应用开发中占据重要地位。Scala,作为一门多范式编程语言,融合了面向对象和函数式编程的特性,为...

    scala和java混合编译

    在现代软件开发中,Java和Scala是两种广泛使用的编程语言。它们各有特色,Java以其稳定性和广泛的社区支持而著名,Scala则以其强大的函数式编程特性及对Java虚拟机(JVM)的无缝集成受到青睐。当一个项目中同时包含...

Global site tag (gtag.js) - Google Analytics