`
鳄鱼旭
  • 浏览: 74671 次
文章分类
社区版块
存档分类
最新评论

初学Scala有感

阅读更多

1、Scala语言的地位

       Scala是JVM系的语言(Clojure、Groovy、Scala、JRuby等属于这一类),这类语言的特点是将语言编译成为Java Bytecode后由JVM解释执行,这样做的原因是:

        . 对于Java程序员来说,转换比较容易,以前学到的知识实际上都可以利用起来(因为这类语言调用Java库实际上是没有障碍的);

        .对于那些对Java的语法不满的程序员来说,可以充分发挥(比如函数式语言的特性:尽管Java8已经增加了对函数式语言的部分支持,但是个人觉得和Scala、Groovy等还有一定的差距);

        .新建一门语言的成本比较低:我个人觉得这应该是未来的语言发展的趋势,比如苹果的Object-C、Swift已经向LLVM靠拢了,即这些新的语言只负责将代码翻译成某种中间代码(JVM的ByteCode或者LLVM的IR),剩下的事情由xxxVM去完成;

        .JIT(即时编译)的广泛应用,使得构造程序的执行环境变得复杂起来,既然后面的工作如此复杂,最好是交给别人去做,自己只要做好前端(程序代码-->中间代码转换)。

 

2、我为什么要学Scala

        最近接触的两个第三方库都是Scala写的:一个是Spark(分布式计算框架),另外一个是Kafka(消息通讯中间件),本着实用开源库必须读其代码的原则,就要学习下Scala了。

 

3、个人感受:

       几天学习下来总体感觉还是不错的,先说下好的地方吧:

      。语法较为松散:比如语句结束的分号大多数情况下是不需要的;Catch Exception也不是必须的;

      。拥有了一些类似于脚本语言+C++特性

              . 没有三元运算符(xxx?xxx:xxx),因为if xxx else 是一个表达式,可以用在语句中;

       。集合的操作非常赏心悦目:比如取数组、List等的元素都可以使用myVar(i),集合的Filter/Map等函数式语言的操作也支持的很好;

       。集合和Java中的集合并不是兼容的,但是Java中的集合也可以使用诸如Filter等操作,内部采用了隐式类型转换机制;

       。一切都是对象(实际上Java并不是纯粹的面向对象的语言,比如int类型就不是对象),1+2实际上也是对象的调用,+,++,+=等操作是可以定义的,有点像C++语言的操作符重载,这个功能算是一把双刃剑吧,好的地方是灵活方便,不好的地方是用的多了可读性比较差,容易引起混乱;

       。N多的占位符,为了简化写法引用的,比如一个Lamda表达式本来的形式是(x:String) => x.toUpperCase() 实际上可以写成 (_:String).toUpperCase,写起来还是很酷的;

       。类型推断的大量使用:我记得Java是JDK7以后,语法上逐步增加了类型推断的功能,比如List<String> x = new ArrayList<>(); 后面就不用写类型了,在Scala里面很多时候都是不需要写类型的,比如var x = new ArrayList<String>(); 编译器实际上就认为x也是ArrayList类型,还是挺方便的;

       。Lamda表达式支持的很好,个人觉得比Java8要好,功能比较多,特别是占位符的引入,非常之方便;

       。设计模式的天然支持:比如声明一个Object X {} 情况下,X就是Singleton了,其他的模式不一一列举了,这篇文章整理的比较经典: http://pavelfatin.com/design-patterns-in-scala/

       。ValueObject支持的很好,比如不可变的集合类等等,个人程序员应该越累越注意这个特性,因为不可变对象与可变对象相比,在程序优化、并发控制方面有很大的差别,函数式语言里面实际上所有的对象都是不可变的;

       。对Actor模型的支持,这块没有仔细研究,但是值得研究。

 

       我写了一个从各个服务的配置文件里面抽取满足MySQL数据库连接URL格式的字符串,再按照一定的格式打印出来,输出每个服务使用了哪些数据库,每个数据库被哪几个服务访问,只写了100行左右的代码,还是很简洁的(个人对Scala语言掌握不熟练的情况下)。

 

       再说说不好的地方:

       。Eclipse-IDE对Debug支持的比较差,Debug的时候不方便(在开始写Scala的时候由于不熟,很多时候依赖Debug,这点体会很明显),比如鼠标查看变量的值、Watch等功能是不支持的,只能在一个Debug的View里面列表看看;

       。生成的Class自己码要比Java代码长,这块还没有仔细研究,不过经常反编译Scala生成的Class文件对理解Scala还是很有帮助的。

       。语法和Java区别还是挺大的,对于Java程序员来说,还是有一定的障碍,并不是像官网说的那样。

分享到:
评论

相关推荐

    Scala 初学者指南

    Scala 初学指南 这本书是什么 本书是 The Neophyte's Guide to Scala 的中文翻译。 The Neophyte's Guide to Scala 是 Daniel Westheide 写的一系列有关 Scala 的文章。 ------------------------------------------...

    scala初学指南

    尽管 Coursera 上的这门课程已经提供了很多材料来介绍 Scala, 但其时间有限,很难把所有东西都解释清楚, 对于初学者的你,Scala 的一些特性看起来就像魔法一样。 可能你知道如何使用它们,但无法完全掌握其背后的...

    Scala初学者入门课程笔记

    Scala初学者入门课程笔记

    scala五本经典资料集合

    scala是一个经典的语言,Scala代表了一个新的语言品种,它抹平了这些人为划分的界限。但是现在scala的相关学习资料不多,因此,本人总结了...因此,无论是初学者,还是想要深入研究scala的研究人员,这些书都能适合你。

    Scala_day01_scala_

    scala学习笔记,适合初学scala的人使用,通俗易懂,小案例适合练手

    scala sdk scala-2.12.3

    scala-2.12.3 scala-2.12.3 scala-2.12.3 scala-2.12.3

    scala实战高清讲解

    scala编程进阶过程中不可或缺的书籍之一,详细介绍了scala语言的各种中高级语法,对于初学和高级开发人员有很大帮助

    scala-sbt-scala编译工具

    scala 编译工具 sbt 安装包。 Little or no configuration required for simple projects Scala-based build definition that can use the full flexibility of Scala code Accurate incremental recompilation ...

    Scala函数式编程

    此外,由于这些语言本身的实际应用机会不多,初学者也难以在实战中获得宝贵的直觉和经验。而在 Scala 的帮助下,这本书并不要求你抛开现有的思维方式另起炉灶,它所做的更像是为你现有的思维方式添砖加瓦,从而令你...

    Scala编程实战.zip

    此文档是讲解实战Scala,希望对喜欢大数据的同学有所帮助!!! 学习Scala语言,不仅仅意味着熟悉新的API,更重要的是一种思维方式的转变。从原有的面向对象编程(OO)到函数式编程(FP)的思想。本书面向实际的使用场景...

    Scala详细总结(精辟版++)

    这是我学习scala时做的笔记,应该比较全面,对于初学scala足够了。文档排版整齐、方便阅读。 另外,我在百度文库也上传过一份,不过csdn上的版本是最新的。希望可以帮助到你。 --------- 目录 --------- 概述 1 ...

    scala2.12.1Windows镜像包

    scala2.12.1Windows镜像包

    scala3 scala3 scala3 scala3 scala3

    scala3 scala3 scala3 scala3 scala3

    scala 2.13.3 API 文档 Html离线版 scala-api.rar

    最新制作 scala 2.13.3 API 文档 Html离线版 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。

    scala编程中文pdf

    scala编程 33章 中文pdf Scala编程实战 目录 第1章字符串. 11 第2章数值39 第3章控制结构.60 第4章类和属性.103 第5章方法147 第6章对象170 第7章包和导入.190 第8章特质200 第9章函数式编程214 第10 章集合242 第...

    最好的scala学习 课件

    最好的scala 学习课件,最好的scala 学习课件,学习spark必备

    eclipse插件 scala下载

    scala eclipse插件 拷贝到相应的目录即可使用,百度一大堆

    快学scala 完整

    快学scala 完整清晰版 大数据spark 主要的编程语言 快学scala 完整清晰版 大数据spark 主要的编程语言

Global site tag (gtag.js) - Google Analytics