首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Scala functional style deferent from java OOP(特性)

2012-12-18 
Scala functional style deferent from java OOP(特点)该程序通过一段斐波那契数列的计算,比较一下Scala的

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.Randomimport java.util.Dateobject 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基础一定看的出大概了。怎么样心动了么?

?

热点排行