Scala编程语言简介
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala编程语言简介相关的知识,希望对你有一定的参考价值。
参考技术AScala编程语言近来抓住了很多开发者的眼球 如果你粗略浏览Scala的网站 你会觉得Scala是一种纯粹的面向对象编程语言 而又无缝地结合了命令式和函数式的编程风格 Christopher Diggins认为
不太久之前编程语言还可以毫无疑义地归类成 命令式 或者 函数式 Scala代表了一个新的语言品种 它抹平了这些人为划分的界限
根据David Rupp在博客中的说法 Scala可能是下下一代Java 这么高的评价让人不禁想看看它到底是什么东西
Scala有几项关键特性表明了它的面向对象的本质 例如 Scala中的每个值都是一个对象 包括基本数据类型(即布尔值 数字等)在内 连函数也是对象 另外 类可以被子类化 而且Scala还提供了基于mixin的组合(mixin based position)
与只支持单继承的语言相比 Scala具有更广泛意义上的类重用 Scala允许定义新类的时候重用 一个类中新增的成员定义(即相较于其父类的差异之处) Scala称之为mixin类组合
Scala还包含了若干函数式语言的关键概念 包括高阶函数(Higher Order Function) 局部套用(Currying) 嵌套函数(Nested Function) 序列解读(Sequence Comprehensions)等等
Scala是静态类型的 这就允许它提供泛型类 内部类 甚至多态方法(Polymorphic Method) 另外值得一提的是 Scala被特意设计成能够与Java和 NET互操作 Scala当前版本还不能在 NET上运行(虽然上一版可以) 但按照计划将来可以在 NET上运行
Scala可以与Java互操作 它用scalac这个编译器把源文件编译成Java的class文件(即在JVM上运行的字节码) 你可以从Scala中调用所有的Java类库 也同样可以从Java应用程序中调用Scala的代码 用David Rupp的话来说
它也可以访问现存的数之不尽的Java类库 这让(潜在地)迁移到Scala更加容易
这让Scala得以使用为Java 或者 编写的巨量的Java类库和框架 Scala会经常性地针对这几个版本的Java进行测试 Scala可能也可以在更早版本的Java上运行 但没有经过正式的测试 Scala以BSD许可发布 并且数年前就已经被认为相当稳定了
说了这么多 我们还没有回答一个问题 为什么我要使用Scala? Scala的设计始终贯穿着一个理念
创造一种更好地支持组件的语言 (《The Scala Programming Language》 Donna Malayeri)
也就是说软件应该由可重用的部件构造而成 Scala旨在提供一种编程语言 能够统一和一般化分别来自面向对象和函数式两种不同风格的关键概念
藉著这个目标与设计 Scala得以提供一些出众的特性 包括
* 面向对象风格
* 函数式风格
* 更高层的并发模型
Scala把Erlang风格的基于actor的并发带进了JVM 开发者现在可以利用Scala的actor模型在JVM上设计具伸缩性的并发应用程序 它会自动获得多核心处理器带来的优势 而不必依照复杂的Java线程模型来编写程序
* 轻量级的函数语法
o 高阶
o 嵌套
o 局部套用(Currying)
o 匿名
* 与XML集成
o 可在Scala程序中直接书写XML
o 可将XML转换成Scala类
* 与Java无缝地互操作
Scala的风格和特性已经吸引了大量的开发者 比如Debasish Ghosh就觉得
我已经把玩了Scala好一阵子 可以说我绝对享受这个语言的创新之处
lishixinzhi/Article/program/Java/hx/201311/26873
Scala - 01 - Scala简介
Scala简介
- Scala具备强大的并发性,支持函数式编程,可以更好地支持分布式系统;
- Scala语法简洁,能提供优雅的API;
- Scala兼容Java,运行速度快,且能融合到Hadoop生态圈中;
Scala特性
- 交互式编程:提供REPL(Read-Eval-Print Loop,交互式解释器),可以即时查看中间结果并修改
- 可伸展的(Scalable)编程语言:小脚本到大规模系统编程都能胜任
- 纯正的面向对象语言:每个值都是对象,每个操作都是方法调用
- 函数式语言:没有可变变量,不会有内存共享的问题
- 兼容Java,无缝的Java互操作:
- Scala运行于Java平台(JVM,Java 虚拟机)上,,scalac编译器将.scala源文件编译成.class文件(Java字节码),被JVM加载并执行;
- 兼容并可以调用现有的Java类库,Java包可以被import到Scala来直接调用Java方法,访问Java字段,继承Java类和实现Java接口;
- Scala也可以被Java直接调用;
Scala文档
- http://docs.scala-lang.org/zh-cn/
- http://docs.scala-lang.org/zh-cn/cheatsheets/
- http://docs.scala-lang.org/zh-cn/overviews/
Scala基础教程
- 菜鸟教程 - Scala http://www.runoob.com/scala/scala-tutorial.html
- 易百教程 - Scala http://www.yiibai.com/scala/
Scala编码约定
- 区分大小写 - Scala区分大小写
- 类名称 - 所有类名应以大写字母开头。如果包含多个单词,则每个内部单词的第一个字母应该是大写。
- 方法名称 - 所有方法名称应以小写字母开头。如果包含多个单词,则每个内部单词的第一个字母应为大写。
- 程序文件名 - 程序文件的名称必须与对象名称完全匹配,并将.scala作为文件后缀,否则将不会编译。
- def main(args:Array [String]) - Scala程序从main()方法开始,Scala程序的强制性部分。
Scala换行符
- Scala是一种面向行的语言,其语句以分号(;)或换行符终止。
- 语句结尾处的分号(;)通常是可选的。语句在单行上自行显示,则不需要输入。
- 如果在单行上写多个语句,则需要分号。
scala> val test = | | You typed two blank lines. Starting a new command. scala>
Scala注释
- Scala单行和多行注释与Java类似。
- 注释中任何字符都被Scala编译器忽略。
- 多行注释可以嵌套,但需要正确嵌套。
Scala包
- 一个包是一个命名的代码模块
- 包声明是源文件中的第一个非注释行
- 导入Scala软件包,以便在当前的编译范围内引用
- 可以从单个包导入单个类和对象,也可以导入多个类或对象
- import语句可以出现在任何地方,而不是只能在文件顶部。
- import的效果从开始延伸到语句块的结束。
import java.awt.Color // 引入Color import java.awt._ // 引入包内所有成员 import java.awt.{Color, Font} //引入包中的几个成员,可以使用selector(选取器) import java.util.{HashMap => JavaHashMap} //重命名成员 import java.util.{HashMap => _, _} //隐藏成员 //引入了util包的所有成员,但是HashMap被隐藏了
注意:默认情况下,Scala 总会引入 java.lang._ 、 scala._ 和 Predef._。
以上是关于Scala编程语言简介的主要内容,如果未能解决你的问题,请参考以下文章