一、概述
Scala是一种将面向对象和函数式编程结合在一起的高级语言,旨在以简洁、优雅和类型安全的方式表达通用编程模式。Scala功能强大,不仅可以编写简单脚本,还可以构建大型系统。
Scala运行于Java平台,Scala程序会通过JVM被编译成class字节码文件,然后在操作系统上运行。其运行时候的性能通常与Java程序不分上下,并且Scala代码可以调用Java方法、继承Java类、实现Java接口等,几乎所有Scala代码都大量使用了Java类库。
二、CentOS7安装Scala
1、下载Scala
到Scala官网https://www.scala-lang.org/download/下载Linux安装包scala-2.12.7.tgz
解压到指定目录:
$ tar -zxvf scala-2.12.7.tgz -C /opt/modules/
2、配置环境变量
export SCALA_HOME=/opt/modules/scala-2.12.7/
export PATH=
P
A
T
H
:
PATH:
PATH:SCALA_HOME/bin
3、测试
CMD中执行scala -version命令
三、变量和数据类型
1.声明变量
Scala中变量的声明使用关键字val和var。
声明一个val字符串变量str:
scala> val str="hello scala"
str: String = hello scala
声明变量时指定数据类型:
scala> val str:String="hello scala"
str: String = hello scala
将多个变量放在一起进行声明:
scala> val x,y="hello scala"
x: String = hello scala
y: String = hello scala
2.数据类型
在Scala中,所有的值都有一个类型,包括数值和函数。
Scala中的值类型可以进行转换,且转换是单向的。
例如下面的例子,允许将Long型转换为Float型,Char型转换为Int型:
val x: Long = 987654321
val y: Float = x //9.8765434E8 (注意在这种情况下会丢失一些精度)
val face: Char = '☺'
val number: Int = face //9786
3.Scala中常用的表达式主要有条件表达式和块表达式。
条件表达式:
//条件表达式主要是含有if/else的语句块:
scala> val i=1
i: Int = 1
scala> val result=if(i>0) 100 else -100
result: Int = 100
//也可以在一个表达式中进行多次判断:
scala> val result=if(i>0) 100 else if(i==0) 50 else 10
result: Int = 100
块表达式:
//块表达式为包含在符号{}中的语句块:
scala> val result={
| val a=10
| val b=10
| a+b
| }
result: Int = 20
4.Scala中的循环主要有for循环、while循环和do while循环三种。
//for循环
scala> for(i<- 1 to 5) println(i)
//while循环
scala> var i=1
i: Int = 1
scala> while(i<5){
| i=i+1
| println(i)
| }
//do while循环
scala> do{
| i=i+1
| println(i)
| }while(i<5)
四、方法与函数
Scala中有方法与函数。Scala 方法是类或对象中定义的成员,而函数是一个对象,可以将函数赋值给一个变量。
1.方法
//方法的定义使用def关键字,语法:
def 方法名 (参数列表):返回类型={
方法体
}
//例如,将两个数字求和然后返回,返回类型为Int:
def addNum( a:Int, b:Int ) : Int = {
var sum = 0
sum = a + b
return sum
}
//代码简写,去掉返回类型和return关键字:
def addNum( a:Int, b:Int ) = {
var sum = 0
sum = a + b
sum
}
2.函数
函数的定义与方法不一样,语法:
(参数列表)=>函数体
定义一个匿名函数,参数为a和b,且都是Int类型,函数体为a+b:
( a:Int, b:Int ) =>a+b
如果函数体有多行,可以将函数体放入一对{}中,并且可以通过一个变量来引用函数,变量相当于函数名称:
val f1=( a:Int, b:Int ) =>{ a+b }
对上述函数进行调用:
f1(1,2)
函数也可以没有参数:
val f2=( ) =>println("hello scala")
对上述函数进行调用:
f2()
3、方法与函数的区别
(1)方法是类的一部分,而函数是一个对象并且可以赋值给一个变量。
(2)函数可以作为参数传入到方法中。
例如,定义一个方法m1,参数f要求是一个函数,该函数有两个Int类型参数,且函数的返回类型为Int,方法体中直接调用该函数:
def m1(f: (Int, Int) => Int): Int = {
f(2, 6)
}
定义一个函数f1:
val f1 = (x: Int, y: Int) => x + y
调用方法m1,并传入函数f1:
val res = m1(f1)
println(res)
输出结果为8。
(3)方法可以转换为函数
当把一个方法作为参数传递给其它的方法或者函数时,系统将自动将该方法转换为函数。
例如,有一个方法m2:
def m2(x:Int,y:Int) = x+y
调用(2)中的m1方法,并将m2作为参数传入,此时系统会自动将m2方法转为函数:
val res = m1(m2)
println(res)
输出结果为8。
除了系统自动转换外,也可以手动进行转换。在方法名称后加入一个空格和一个下划线,即可将方法转换为函数:
val f2=m2 _
val res=m1(f2)
println(res)
输出结果为8。