1、scala概述
scala是一门多范式的编程语言,设计初衷是实现可伸缩的语言,并集成面向对象编程和函数式编程的各种特性。
Scala是可扩展语言的缩写,是一种混合功能编程语言。
Scala 运行在Java虚拟机上,并兼容现有的Java程序。
Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。
-
Scala是面向对象语言
Scala是一种纯粹的面向对象语言,每一个值都是一个对象。 对象的类型和行为由类和特征描述
类通过子类化和基于灵活的基于混合组合机制进行扩展,作为多重继承的干净替代。 -
Scala是函数式编程语言
Scala也是一种函数式语言,每个函数都是一个值,每个值都是一个对象,所以每个函数都是一个对象。
Scala提供了一个轻量级的语法来定义匿名函数,它支持高阶函数,它允许函数嵌套,并支持currying -
Scala是静态类型的
Scala与其他静态类型语言(C,Pascal,Rust等)不同,它不提供冗余类型的信息。 在大多数情况下,不需要指定类型,减少了不必要的重复。 -
Scala运行在JVM上
Scala代码被编译成由Java虚拟机(JVM)执行的Java字节代码,这意味着Scala和Java具有通用的运行时平台。因此,可以轻松地从Java迁移到Scala。
Scala编译器将Scala代码编译成Java字节代码,然后可以通过scala
命令执行。scala
命令类似于java命令,因为它执行编译Scala代码。 -
Scala可以执行Java代码
Scala能够使用Java SDK的所有类以及自定义Java类,或java开源项目。 -
Scala可以做并发和同步处理
Scala允许以有效的方式表达一般的编程模式。减少了线路数量,并帮助程序员以类型安全的方式进行编码。允许以不变的方式编写代码,使得应用并发和并行性(Synchronize)变得容易。
2、Linux下scala\spark的安装配置
scala、spark的安装配置可参照以下博客:
https://blog.youkuaiyun.com/Candriy/article/details/82389973
3、scala使用
scala可做工业级的编写计算器使用
1、启动scala解释器:
解释器显示出结果及其类型,结果被命名为res0,在后续操作中可直接使用res0
由此可见,上面的过程:读取-->求值-->打印-->循环,即repl
从技术上讲,scala程序并不是一个解释器。实际上是:输入的内容被编译成字节码,然后交由java虚拟机执行。
2、声明变量和值
除了直接使用res0、res1之外,也可以自定义名称:
val定义的值是一个常量,若要声明其值可变的变量用var
如非必须改变其值,个人推荐使用val定义
无需给出值或者变量类型,会根据表达式初始化推断出来。在必要的时候也可指定类型。
说明:
在scala中,变量或函数的类型总是写在变量或函数名称之后,注意与java区分:
java方式:String greeting
scala方式:greeting:String
在scala中,仅当同一行代码中存在多条语句时才需要用分号;分隔开。
可同时声明多个值:
3、常用类型
数值类型:Byte、Char、Short、Int、Long、Float、Double;Boolean类型
跟java不同,这些类型都属于类
在scala中,不需要包装类型。scala编译器会自动完成基本类型和包装类型之间的转换。
scala用底层的java.lang.String类来表示字符串,不过其通过StringOps类给字符串追加了很多操作。
如下:intersect方法输出两个字符串共通的一组字符:在该表达式中,java.lang.String对象“hello”被隐式地转换成一个StringOps对象,接着StringOps类的intersect方法被调用。
同样,scala还提供了RichInt、RichDouble、RichChar等,分别提供Int、Double、Char等所不具备的便捷方法。
还具有BigInt和BigDecimal类,用于任意大小(但有穷)的数字。
说明:在scala中,用方法,而不用强制类型转换,来做数值之间的转换。
4、算术和操作符重载
操作符实际上是方法:eg:a+b 是 a.+(b)的简写,此处+是方法名。
也就是说,a 方法 b 可简写为 a.方法(b),该方法表示一个带有两个参数的方法(一个隐式的和一个显示的)。
在scala中,可使用几乎任何字符给方法命名。
scala没有++和--操作符,因为Int类是不可变的,这样的方法并不能改变某个整数类型的值。而是需要使用+=1或-=1;
java中,不能对操作符进行重载
scala允许定义操作符,可自己确定是否要在必要时有分寸的使用这个特性。
5、调用函数和方法
scala提供函数,相比java,无需从某个类调用其静态方法
在scala中,导入通配符是"_",类似于java中的*
说明:使用scala.开头的包时,可省去scala前缀。即import 包名._即可。
scala没有静态方法,有一类似特性-->单例对象(singleton object),后续将详细介绍。
通常,一个类对应一个伴生对象(companion object),其方法跟java中的静态方法一样。
不带参数的scala方法通常不使用圆括号。例如:
一般来讲,没有参数且不改变当前对象的方法不带圆括号。
6、apply方法
以上表示:该字符串的第四个字符
使用伴生对象的apply方法时scala中构建对象的常用方法。
以下语句产生一个新的BigInt对象,而不需要使用new
7、Scaladoc
类似于javadoc