- 任务2.1 安装与运行scala
- 2.1.1 了解Scala特性
- (1)面向对象
Scala 是一种纯粹的面向对象语言。一个对象的类型和行为是由类和特征描述的。类通过子类化和灵活的混合类进行扩展,成为多重继承的可靠解决方案。 - (2)函数式编程
Scala提供了轻量级语法来定义匿名函数,支持高阶函数,允许函数嵌套,并支持柔数柯里化。Scala的样例类与式匹配支持函数式编程语言中的代数类型。Scala的单例对象提供了方便的方法来组合不属于类的函数。用户还可以使用Scala的模式匹配、编写类假正则表达式的代码处理可扩展标记语言(Extensible MarkupLanguage,XML)格式的数据 - (3)静态类型
Scala配备了表现型的系统,以静态的方式进行抽象,以安全和连贯的方式进行使用。系统支持将通用类、内部类、抽象类和复合类作为对象成员,也支持隐式参数,转换和多态方法等,这为抽象编程的安全重用和软件类型的安全扩展提供了强大的支持。
- 2.1.2 Scala环境设置
- 1.查看当前java的版本号
java -version - 2.下载并解压Scala的版本(以liunx系统为主)
https://downloads.lightbend.com/scala/2.11.12/scala-2.11.12.tgz
- 安装配置和环境变量如下:
tar -zxf scala-2.11.12.tgz -C /opt/module
vi /etc/profile
export SCALA_HOME=/opt/module/scala-2.11.12
export PATH=SCALA_HOME/bin
- 3.验证scala是否安装成功
运行scala在终端上输入scala
进入Scala后 输入:(:paste)可以进入Scala的paste模式
- 任务2.2 运算符的使用
- 2.2.1运算符的使用
https://blog.51cto.com/u_16401670/10229961 - 2.2.2定义与使用数组
定义数组:var arr:Array「String」 = new Array「String」(num)
连接数组(1):val arr1 = Array(1,2,3) , val arr2 =Array(4,5,6)
连接数组【通过concat()方法】(2):
import Array._
val arr4 = concat(arr1,arr2)
创建区间数组(range),生成数组(1,3,5,7,9,11,13,15,17,19)
val arr = range(1,20,2)
查看数组(z)的长度:z.length
查看数组(z)的第一个元素:z.head
查看数组(z)中除了第一个元素外的其他元素:z.tail
判断数组(z)是否为空:z.isEmpty
判断数组(z)是否包含元素“baidu”:z.contains(“baidu”) - 2.2.3定义与使用函数
①定义函数
def add(a:Int, b:Int): Int = {a + b}
②匿名函数
(x:Int,y:Int)=>x+y
③调用函数
在创建完的匿名函数命令后面增加
**addInt(1,2)**
④占位符
val addInt=(:Int)+ (_:int)
**在创建完的匿名函数命令后面增加**
**addInt(1,2)**
⑤高阶函数——函数作为参数(返回值)
高阶函数指的是操作其他函数的函数。高阶函数可以将函数作为参数,也可将函数作为返回值。
**参数:**
**def addInt(f:(Int,Int)=>Int,a:Int,b:Int)= f (a,b)**
**addInt((a:Int,b:Int)=>a+b,1,2)**
**返回值:**
**def rectangle(length:Double)=(height:Double)=>(length+height)*2**
**val func=rectangle(4)**
**println(func(5))**
⑥函数柯里化
函数柯里化是指将接收多个参数的函数变换成接收单一参数
**def addInt(a:Int,b:Int):Int=a+b**
**addInt(1,2)**
**(定义两个整数相加的函数)**
**函数柯里化:addInt(1)(2)**
⑦scala练习
https://blog.51cto.com/blogger/success/10235026
- 任务2.3 统计XXX号码段的数量
- 2.3.1 使用if判断
Scala中的if判断根据复杂程度分为if语句、if...else语句、if...else if...else语句、 if...else嵌套语句
var x = 10
if(x ==10){
**println("x的值为10")**
}else{if(x ==20){
**println("x的值为20")**
}else{
**println("无法判断x的值")**
}
- 2.3.2使用for循环
在Scala中有三种循环结构,分别为:while循环、do...while循环和for循环
var i, j = 0;
for(i < - 1 to 2){
**for (j < -1 to 2)**
**println("(" + i + "," + j + ")")**
}
- 任务2.4 根据归属地对手机号码进行分组
- 2.4.1 定义与使用列表
Scala的列表与数组非常相似,与数组不同的是,列表是不可变的
- 2.4.2 定义与使用集合
集合是没有重复对象的,所有元素都是唯一的。
|方法|描述| |-|-| |defhead: A|获取集合的第一个元素| |def init:SetfAj|返回所有元素,除了最后一个| |def last:A|获取集合的最后一个元素| |deftail:Set[A]|返回所有元素,除了第一个| |def ++(elems: A ): Se:[A]|合并两个集合| |def take(n: Int) ListfA]|获取列表前n个元素| |defcontams(elem: Any): Boolean|判断集合中是否包含指定元素| - 2.4.3定义与使用映射
val person:Map[String,Int]=Map("Jobn"->21,"Betty"->20,"Mike"->22)
person.isEmpty
person.keys
person.values - 2.4.4定义与使用元组
元组是一种类似于列表的结构,但与列表不同的是,元组可以包含不同类型的元素。元组的值是通过将单个的值包含在元括号中构成的。
元组定义方式1:val t=(1,3.14,"a")
元组定义方式2:val t =new Tuple3(1,3.14,"a")
访问元组元素:t._1 或t._3 - 2.4.5 使用函数组合器
- 2.4.5.1 map()方法
val num:List[Int]=List(1,2,3,4,5)
num.map(x=>x*x) - 2.4.5.2 foreach()方法
val num:List[Int]=List(1,2,3,4,5)
num.foreach(x=>print(x*x+"\t")) - 2.4.5.3 filter()方法
val num:List[Int]=List(1,2,3,4,5)
num.filter(x=>x%2==0) - 2.4.5.4 flatten () 方法
val list=List(List(1,2,3),List(4,5,6))
List.flatten - 2.4.5.5 flatMap() 方法
val str = List("a:b:c","d:e:f")
str.flatMap(x => x.split(":")) - 2.4.5.6 groupBy()方法
val num:List[Int]=List(1,2,3,4,5,6,7,8,9,10)
num.groupBy(x =>x%2==0)
- 任务2.5 编写手机号码归属地信息查询程序
- 2.5.1 定义Scala类
定义类Point
实例化类并调用类的方法
new Point(1,2).move(2,3)
Scala继承
override 关键字的使用
abstract class Father {
**def fun1 = 1**
**def fun2 = Int**
}
class Child extends Father {
**override def fun1 =2**
**def fun2 = 1**
**}**
- 2.5.2 使用Scala 单例模式
- 2.5.2.1 定义单例对象Person
object Person {
val age = 10
def getAge = age
} - 2.5.2.2 伴生类和伴生对象
class Person private(val name: String){
private def getSkill() = name +"s skill is:" +Person.skill
}
object Person {
private val skill = "basketball"
private val person = new Person("Tracy")
def printSkill = println(person.getSkill())
def main(args: Array[String]): Unit = {
Person.printskill
}
}
- 2.5.3使用Scala模式匹配
def matchTest(x: Int) = x match {
case 1 => println("one")
case 2 => println("two")
case _ =>println("many")
} - 2.5.4读写文件
写入文件:
import java.io._
var pw = new PrintWriter(new File("/opt/test.txt"))
pw.println("I am learning Scala")
读取文件:
import scala.io.Source
Source.fromFile("/opt/test.txt").foreach{print}