当前位置:首页 > 开发 > 编程语言 > JDK JVM > 正文

Scala: JVM上的函数编程

发表于: 2012-02-23   作者:bookjovi   来源:转载   浏览:
摘要:     说Scala是JVM上的函数编程一点也不为过,Scala把面向对象和函数型编程这两种主流编程范式结合了起来,对于熟悉各种编程范式的人而言Scala并没有带来太多革新的编程思想,scala主要的有点在于Java庞大的package优势,这样也就弥补了JVM平台上函数型编程的缺失,MS家.net上已经有了F#,JVM怎么能不跟上呢?     对本人而言

    说Scala是JVM上的函数编程一点也不为过,Scala把面向对象和函数型编程这两种主流编程范式结合了起来,对于熟悉各种编程范式的人而言Scala并没有带来太多革新的编程思想,scala主要的有点在于Java庞大的package优势,这样也就弥补了JVM平台上函数型编程的缺失,MS家.net上已经有了F#,JVM怎么能不跟上呢?

    对本人而言尽管Scala中functional应有尽有,但是做的不够好,体现在以下几点。

 

  • 类型系统。与主流的FP语言比较,如lisp、Erlang、Haskell,Scala的语法极为繁琐冗余,lisp虽然括号多了点,但是type系统极为简单。lisp是动态类型语言可能不具可比性,那么看haskell吧,haskell可是static typed language,写过haskell的程序后再用scala写一遍简直就要抓狂,为什么都是静态类型语言,haskell却能做的那么好呢?原因在于compiler,在本人看来scala的编译器比haskell有很大的距离,scala每个function的参数都要加个冒号和参数类型,haskell却不需要,不是haskell不知道,而是haskell的编译器搞定了类型推导,同时haskell的函数签名和函数定义分开的方式极大的提高了开发效率,这才是未来静态类型语言的发展方向。
  • list。scala的list真的不是一般繁琐,还要写List,cons竟然用两个冒号来表示,调用head和tail时竟要搞得像面向对象一样。谁会用scala的list去做些真正有用的事情呢?后来想一想,为什么Scala要用两个冒号来表示list操作呢?为什么不用一个冒号呢?原因是一个冒号容易让人误以为是类型声明呢!哎!很多语言都或多或少的有这种符号痛苦,很多语法设计不是多么的高深,只是不得已而为之。扯远了,回到list来,scala中的list有泛型支持,同样,语法怪异繁琐。
  • tuple。用tuple还要new个tuple对象,还是FP简单,直接用小括号就行了。
  • lambda。匿名函数在scala中的表示是=>,lambda在FP中极为常用,为什么不用更简单的->呢?
  • list comprehensions。 永远都是FP的 list comprehensions简单明了,[x+y|x<-[1..5], y<-[6..10]],scala使用了for yield语法,把真正重要的结果list表示却放在了后面,还是放在前面好些吧?yield?我还以为这是在写coroutine和genertor呢!
  • pattern match。这个让我更难受,都不想说了。
  • concurrency。scala用的是actor设计模式,和erlang一样,这个没什么多说,Erlang做的很好,如可靠性,分布式,还有强大的OTP各种behavie模式。

    总的感觉scala在函数型编程方面没有原生的函数型语言方便,如haksell,在concurrency方面又没有Erlang的可靠和性能,而且scala的语法实在是繁琐,如果要用函数型语言来解决个实际问题,还真要考虑考虑,用haksell多方便啊,实在不行用F#,.NET上优秀的资源也很多。

 

    Programming in Scala

 

Scala: JVM上的函数编程

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
/** * Created by corleone on 2016/1/3. */ object new_in_3 extends App { //写法一,始终待返回
Scala函数及函数式编程 函数声明 函数相当于Java中的静态方法:除了递归之外不需要声明返回类型 [jav
Scala函数及函数式编程 函数声明 函数相当于Java中的静态方法:除了递归之外不需要声明返回类型 [jav
Scala函数及函数式编程 函数声明 函数相当于Java中的静态方法:除了递归之外不需要声明返回类型 [jav
常常听到函数式编程,却没有深入了解一下,今天看了一下,函数式编程是一种编程范式,函数式编程源
Scala 函数式编程_函数的定义 函数的定义 函数的基本结构, 如下,在scala shell中, scala> def
主要来自 Scala 语言发明人 Martin Odersky 教授的 Coursera 课程 《Functional Programming Princi
环境: CentOS 6.3 看例子,说实话。 入门函数: scala> def max(x: Int,y: Int): Int = { | if
学习了Scala并发编程匿名Actor、消息传递、偏函数实战解析及其在Spark源码中的应用解析,具体来说Sc
编程世界就好比江湖,各种技术与思想有如各种内外家功夫在历史的舞台上纷呈登场,各领风骚。如今,
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号