Scala简介
Scala是Scalable Language的简写,是一门多范式的编程语言,该语言类似于Java,可以与Java进行互操作,其具有面向对象编程和函数式编程的各种特性,其具有以下特性:
面向对象特性
Scala是一门纯面向对象的语言,每个值都是对象,对象的数据类型以及行为由类和特质描述,类抽象机制的扩展有两种途径:一种途径是其Trait特性,即子类继承,Trait结合了抽象类和接口的特点,更便于继承封装,另一种途径是灵活的混入机制(这个具体是指什么?),这两种途径能避免多重继承的种种问题;
函数式编程
同时Scala也是一种函数式语言,其函数也可以当成值来用;Scala提供了轻量级的语法用于定义匿名函数、支持高阶函数,允许嵌套多层函数,并支持柯里化,并且具有case Class及其内置的模式匹配类似于函数式编程余元中常用的代数类型
静态类型
Scala具有类型系统,通过编译时检查,保证代码的安全性和一致性
扩展性
Scala的设计秉承一项事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展;Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构:
任何方法可以用作前缀或后缀操作符
可以根据预期类型自动构造闭包
并发性
Scala使用Actor作为其并发模型,Actor是类似线程的实体,通过邮箱收发消息;Actor可以复用线程,因此可以在程序中使用数百万个Actor,而线程只能创建数千个;
Scala基本概念
标识符
Scala可以使用两种形式的标识符:字符数字和符号
字符数字使用字母或者下划线开头,后面可以接字母或是数字,符号"¥"(实际上是英文版$,在该编辑器中无法连续输入,因此采用¥代替)在Scala中也看为字母,但是在Scala中其具有特殊作用,应该避免使用;
Scala的命名规则采用camel命名规则;
Scala内部实现时会使用转义的标识符,比如:->使用¥colon¥minus¥greater来表示这个符号,因此如果需要在java代码中访问:->方法,需要使用¥colon¥minus¥greate来访问
并且,当方法名与关键字冲突时,你需要使用’ '来区分,如Thread中的yield方法,你不能直接使用Thread.yield(),而是需要使用Thread.‘yield’()来使用,这是因为yield属于Scala中的关键字
关键字
Scala中的关键字如下图所示

其中forSome代表存在类型,譬如说Map[string,T] forSome{type T},这样声明另一个存在类型T,类似于其他语言中的泛型
implicit是Scala中隐式转换的关键字,这也是Scala语言的重要特性之一,这个在后面也会提到
lazy是用于定义惰性变量实现延迟加载的关键字,使用lazy关键字修饰变量后,只有在使用该变量时,才会调用其实例化方法,即在后面的代码使用时才会调用该方法
super是用来引用父类的关键字,以访问父类的成员方法,即直接输出父类方法中的输出
package关键字是用来定义包的,具有两种方式,一种是在文件的头定义包名,这种方法就后续所有代码都放在这个包里,另一种就是在一个文件中定义多个包
方式一
package Type1
class HelloWord1
方式2
package Type2{
class HelloWord2
}
yield关键字的主要作用在于记住每次迭代中的相关值,并逐一存入到一个数组中(针对每一次for循环的迭代,yield会产生一个值,被循环记录下来(内部实现上,像是一个缓冲区),当循环结束后,会返回所有yield的值组成的集合,返回集合的类型与被遍历集合的类型一致
代码示例如下:
val a = Array(1,2,3,4,5)
for(e <- a) yield e*3
//返回值为res1:Array[Int] = Array(3,6,9,12,15)
并且从代码来看,Scala中还有一个特性是其末尾可加可不加“;”,其会自动识别,相对于会方便一些
import关键字主要用来引用包,可以出现在任何地方,而不是只能在文件顶部,import的效果可以从开始延伸到语句块的结束,并且可以中途修改
import java.awt._ // 引入包内所有成员
import java.awt.Color // 引入包内的Color
import scala.collections.mutable.Set; //引入可变Set包
val set = Set(1,2,3)
set.add(5)
import scala.collections.immutable.Set; //引入不可变Set包
val set = Set(1,2,3)
// 此时不能再使用add方法了
Scala是一种融合了面向对象和函数式编程特性的多范式语言。它支持静态类型、具备良好的扩展性和并发模型,能够与Java无缝互操作。本文介绍了Scala的基本概念、关键特性和一些核心语法。

326

被折叠的 条评论
为什么被折叠?



