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

初学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] Scala 开发经典实例 (英文版)

    [奥莱理] Scala 开发经典实例 (英文版) [奥莱理] Scala Cookbook (E-Book) ☆ 出版信息:☆ [作者信息] Alvin Alexander [出版机构] 奥莱理 [出版日期] 2013年08月20日 [图书页数] 722页 [图书语言] 英语 ...

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

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

    最好的scala学习 课件

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

    eclipse插件 scala下载

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

    快学scala 完整

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

Global site tag (gtag.js) - Google Analytics