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 SDK,全称为Scala Software Development Kit,是用于开发Scala应用程序的核心工具集。Scala是一种多范式的编程语言,融合了面向对象和函数式编程的特点,它运行在Java虚拟机(JVM)上,能够充分利用Java生态...
Scala 初学者入门课程笔记 Scala 是一种多范式编程语言,支持面向对象编程、函数式编程和逻辑编程。Scala 的设计目标是提供一种expressive 且简洁的语言,使开发者可以快速开发高质量的软件。下面是 Scala 初学者...
Scala3,也被称为Scala 3或Dotty,是Scala编程语言的一个重大更新,旨在提高其简洁性、可读性和类型安全性。Scala3的发布标志着该语言的进一步成熟,它引入了一系列改进,旨在解决早期版本中的一些痛点,同时保持对...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。这个"scala-2.12.10.zip"文件是Scala编程语言的特定版本——...无论是初学者还是经验丰富的程序员,都能在Scala的世界中找到挑战和乐趣。
在这个名为"学习scala好的项目"的压缩包中,我们可以期待找到一系列有助于初学者掌握Scala编程的知识资源。 首先,让我们深入探讨Scala的基础知识。Scala的语法简洁而富有表现力,它的类型系统支持静态类型检查,有...
尽管 Coursera 上的这门课程已经提供了很多材料来介绍 Scala, 但其时间有限,很难把所有东西都解释清楚, 对于初学者的你,Scala 的一些特性看起来就像魔法一样。 可能你知道如何使用它们,但无法完全掌握其背后的...
总的来说,`scala-2.12.10.tgz`是一个全面的Scala安装包,适合在Linux环境中学习和使用Scala语言,无论是初学者还是经验丰富的开发者,都能从中受益。通过深入学习和实践,开发者可以利用Scala的强大功能来构建高...
"Scala编程超级详细的实战书籍.pdf"这本书很可能涵盖了以上所有主题,并通过实例深入浅出地讲解了这些概念,对于Scala初学者和经验丰富的开发者都是极好的学习资料。通过阅读这本书,读者不仅能掌握Scala语言的基础...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。Scala运行在Java虚拟机(JVM)上,因此可以充分利用Java生态系统的丰富资源。...对于想要涉足Scala和Spark开发的初学者,这是一个理想的起点。
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。这个"scala2.12.1Windows镜像包"是为Windows操作系统设计的Scala编程环境的安装包,版本号为2.12.1。Scala 2.12.x系列是其重要的一个稳定...
总的来说,这个合集为Scala的学习者提供了全面的资源,无论你是初学者还是经验丰富的开发者,都能从中受益。通过阅读这些书籍和遵循编程规范,可以提高你的Scala编程技能,更好地利用Scala的强大功能来解决实际问题...
scala是一个经典的语言,Scala代表了一个新的语言品种,它抹平了这些人为划分的界限。但是现在scala的相关学习资料不多,因此,本人总结了...因此,无论是初学者,还是想要深入研究scala的研究人员,这些书都能适合你。
- **初学者**:对于没有接触过Scala的初学者来说,本书是一个非常好的入门资源,它从基础语法到高级特性进行了全面讲解。 - **经验丰富的开发者**:即使是已经具备一定编程经验的开发者,也能从本书中获得关于Scala...
Scala是一种强大的多范式编程语言,它结合了面向对象和函数式编程的特性。MyBatis则是一款流行的Java持久层框架,主要用于简化数据库操作。在本项目中,"scala + mybatis 数据库查询",我们将探讨如何将Scala与...
"快学Scala(中文完整版).pdf"这本书可能是为初学者或对Scala感兴趣的人设计的,旨在帮助他们快速理解和掌握这门语言。 Scala的关键特性包括: 1. **静态类型**:Scala是静态类型的,这意味着每个值都有一个明确的...
### Scala语法简明教程知识点详解 #### Scala语言简史 - **诞生历史**:Scala起源于瑞士联邦理工学院洛桑(EPFL),由Martin Odersky在2001年开始设计,其灵感来源于Funnel——一种结合了函数式编程思想与Petri网...
Scala 是一种多范式的编程语言,它融合了面向对象和函数式编程的特性。下面将详细解释题目中涉及的Scala知识点: 1. **var、val 和 def 的区别**: - `var` 定义可变变量,可以多次赋值。 - `val` 定义不可变变量...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,被广泛应用于大数据处理领域,特别是与Apache Spark相结合时。本课件是针对Scala学习者精心准备的资源,旨在帮助你深入理解和掌握Scala的...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。这个"scala学习源代码"的压缩包文件很可能包含了用于教学或自我学习Scala编程的基础示例。让我们深入了解一下Scala语言的关键概念和特性。 ...