`

scala 学习一

阅读更多

1.1.     速度!

Java的运行速度

——基于JVM,和Java运行速度相当。看看Ruby、Perl、Python对大项目运行效率的无奈,就知道有个好的编译器(Scalac)和运行时(JVM)是多么美好。

Python/Ruby的编程速度

——有更多的内建库和数据结构,编程就更快,Scala在完全继承Java和.NET的标准库的基础上,还扩展了更丰富有用的函数库。看看C++、D、Go等语言库的发展情况(不是匮乏就是混乱),就知道从头创建如Java、.NET这般庞大全面的类库并非易事;

类库和运行速度有关系吗?——很大程度上有,众多专家已经在类库中准备了充分优化的稳定算法,Scala对Java Collection算法进行直接包装或者直接调用,如果没有丰富的类库,你在项目周期内免不了摘抄一些不一定靠谱的算法和功能代码,这些代码极有可能在运行时给你带来麻烦。使用类库算法,不用担忧自造轮子的运行效率。

Scala是静态语言,Scalac和Javac是同一作者,编译成.class后运行于JVM平台,近20年那么多大公司投入进行的优化也不是白搭。对于大部分的应用来说,使用Scala不用再顾虑运行速度,它可能不是最快,但至少逼近Java,而不像Groovy、JRuby、Jython那般与Java有高达数十倍的效率差距。

1.2.     易用的数据结构

List-Map-Tuple及其丰富特性支持让你解决数据结构问题时游刃有余。

List(1,31,4,3,53,4,234) filter (10<) filter (100>)  // List(31, 53)
val (a,b) = List(1, 31,4,3,53,4,234) partition (10>) // a=List(1,4,3,4), b=List(31,53,234)
def info(p:Person) = (name, age, email) // info._1, info._2, info._3

1.3.     OOP+FP

l  适当地选用OOP或者FP,能够使表达相对另一种更加清晰准确。

l  实际可见的生产力在于:一个应用中的部分代码尤其是高知识凝聚的代码如数学函数和设计模式,一般来说不会自己编写,而是会来自于现成的Java库,或者其他语言,或者伪代码。我们可以很容易地把过程语言、面向对象语言、函数式语言中的代码“翻译”成Scala代码。试想如果我们要把Haskell或者Lisp的某个尾递归算法翻译成Java代码,还得多花点时间;而要把C++的代码翻译成Hashkell,同样也不简单。Scala的混血性给我们的实际使用提供了便利。

l  语言特色能够塑造编程者的思维: C++也能使用抽象基类设计多重继承,但Java的接口引导你走得更远;Java也能设计类型安全的静态方法(final static),但Scala鼓励你这样做并逐步从OOP到达FP的彼岸,而且来去自如。

1.4.     动态+静态

Scala虽然是一门彻头彻底的静态语言,但又具备了现代动态语言的很多方便和灵活:

l  不需要冗余的类型声明

l  可以在已有类上增加新方法(implicit转换和Dynamic trait)

l  可以把不继承共同父类的不同类型对象传到方法中

l  可以做静态语言的Refactoring

l  不用象动态语言那样测试代码比业务代码还多

l  代码自动完成(REPL和IDE)

l  编译静态语言的性能

l  Read-Eval-Print Loop交互解释器(注:Linux下的用户体验远好于Windows下)

1.5.     DSL

Scala可以把xml/html处理、数学公式表达、SQL查询等包装的更优雅、更合理,为使用者提供更好的API。这也使Scala的程序也更可读,从而更易于维护。

1.6.     够复杂

不同的思考模式:Java是先写后想,Scala是先想后写(其实FP大都如此)。

Scala相比于Java,可能达不到10倍的代码精简;但读Scala代码的效率一般只有Java的1/10——可见Java是一门没有多少特例的简单语言,而Scala则不然。

你不要指望把Scala作为初学者的第一门编程语言,这门语言甚至不是初级程序员能够掌控的——换句话说,能够读懂和写Scala代码,说明你是一个不折不扣的资深程序员,或者更准确一点,是资深Java程序员。

1.7.     够有趣

还看这句话:“Put productivity & creativity back in the hands of developers”。其实不仅限于Scala,对于所有的编程语言来说,一门语言是否“好玩”有趣,能否激起创作欲,才是最关键的,这比语言风格、运行速度、工具支持、社区文化都来得重要。

回想我使用过的语言,C、C++,只有在学习“图形学”课程做作业的时候给我“好玩”和编程过瘾的感觉;VB、Delphi、Lotus Script/Formular、JavaScript,重来没有给过我“好玩”的感觉,而Java是在之前很长一段时间内让我觉得最“好玩”的语言,用它编游戏、做模式识别的作业、做产品……,乐在其中。但是Java也许久没有再给我这种编程过瘾的感觉了。之前发现Groovy的时候,我以为又找到一门好玩的语言了,但我一段时间使用之后,发现不是我的菜(Perl、Python、Ruby也如此);我不是说那些我不觉得好玩的语言不好,有其他很多人觉得他们非常“好玩”,并且用它们创建了无数杀手级的、伟大的、有用的程序。

有些人对一门语言会玩一辈子,就像Lisp、Haskell和Smalltalk的拥趸;而有些人会不断寻找下一个玩意儿,就像原来玩Java的一些人发现更好玩的Ruby和Python之后,倒戈狂喷Java,力挺后者;Groovy/Grails的玩家在很短的时间里面,写了无数的扩展和Plugin应用;学习Scala,能很多好玩的地方,能用它有激情地去写一些振奋人心的应用出来!

1.8.     开发社区

Scala开发/用户社区气氛良好,基本都是资深开发者以及有一定经验的用户,不会碰到太弱智的事(提问、争吵),除了语言和工具开源免费,最权威和最好的书也都是免费的(包括Lift社区)

 

分享到:
评论

相关推荐

    scala学习手册.zip

    Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化 。Scala的Case Class及其内置的模式匹配相当于函数式编程语言中常用的...

    scala学习帮助文件

    scala学习帮助文件,中文+英文 Scala 编程 第一发行版,第六版本 ISBN-10: 0-9815316-1-X ISBN-13: 978-0-9815316-1-8

    scala学习源代码

    scala的小例子一个简单的例子有一点小帮助

    scala 学习资料

    学习spark的时候接触到的Scala语言,这里有一套学习资料,希望对大家有帮助。

    Scala学习之路(一)

    这篇文章是Scala方面的,scala的windows安装,scala的linux安装,以及第一个scala程序

    scala学习笔记1

    ScalaOverview.pdf ScalaTutorial.pdf ProgrammingInScala.pdf(这本是书) 博文链接:https://dogstar.iteye.com/blog/182673

    scala零基础学习

    个人总结的scala学习资料,部分参考自菜鸟教程,大家可以按照教程从下载安装配置到熟悉语法来学习scala,欢迎下载文档学习

    scala学习资料

    Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。

    scala五本经典资料集合

    但是现在scala的相关学习资料不多,因此,本人总结了几篇写的较好的scala学习资料,包含&lt;ScalaQuery_Commerzbank_2011&gt;&lt;twitter-scala&gt;&lt;TR611&gt;&lt;scala-style-guide&gt;。因此,无论是初学者,还是想要深入研究scala的...

    Scala学习技术教程

    一本很好的Scala学习教程,带有丰富的课后习题,是一本初学者的知识指导!

    Scala机器学习Scala机器学习.zip

    机器学习(Machine Learning)是一种人工智能(AI)的分支领域,关注如何让计算机系统从数据中自动学习和改进,并且能够通过经验来完成任务,而无需明确地进行编程。简而言之,机器学习使计算机具备从经验中学习的...

    Scala编程实战.zip

    学习Scala语言,不仅仅意味着熟悉新的API,更重要的是一种思维方式的转变。从原有的面向对象编程(OO)到函数式编程(FP)的思想。本书面向实际的使用场景,提供了大量的Scala实例,同时,也给出底层的原理和相关的...

    Scala函数式编程

    很大篇幅都放在,使用scala实现scala默认库文件的API中,通过对简单的函数式编程逻辑的介绍和实践,主要是实践,建立起来一个比较明晰的scala思维模式,或者叫函数式编程的思维模式。 2 无副作用的函数式编程,同时...

    Scala实用指南

    本书是为想要快速学习或者正在学习 Scala 编程语言的 Java 开发者写的,循序渐进地介 绍了 Scala 编程语言的多个方面。 本书共分为 4 个部分:第一部分详细介绍 Scala 的一些基础知识,并和 Java 中的相关概 念进行...

    基于Scala的Spark学习项目设计源码

    本设计源码提供了一个基于Scala的Spark学习项目。项目包含95个文件,主要使用Scala和Java编程语言。文件类型包括80个Scala源代码文件、4个XML配置文件、3个TXT文档、2个Markdown文档、2个Java源代码文件、1个GIT忽略...

    flinkDemo完整代码scala版 - flinkDemo.zip

    flinkDemo完整代码scala版,包含TableApi,Flink Sql,DataStream ,socket、kafka、mysql数据源,

    scala.rar基础知识,笔记很好的详细

    Scala学习资源Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式编程和函数式编程风格。Christopher Diggins认为: 不太久...

    基于Scala的Spark学习仓库设计源码

    本源码项目是基于Scala的Spark学习仓库设计,包含282个文件,主要使用Scala编程语言。该项目是一个Spark学习仓库,旨在帮助开发者学习和实践Spark技术。系统提供了丰富的学习资源,包括Spark的示例代码、文档和教程...

Global site tag (gtag.js) - Google Analytics