Scala安装环境部署及入门
概述安装idea配置Scala初体验scala变量与常量Scala数据类型Scala数据类型层次结构Scala循环控制while循环for循环Scala的break和continuefor循环过滤for循环返回值
Scala元组
概述
Scala源自Java Scala构建在JVM之上 Scala与Java兼容、互通
Scala的优势 多范式编程:面向对象编程、函数式编程 表达能力强,代码精简
大数据与Scala Spark采用Scala语言设计 提供的API更加优雅 基于JVM的语言更融入Hadoop生态圈
Scala
面向对象特性 每个值都是对象 对象的数据类型和行为由类(Class)和特质(Trait)描述 利用特征实现混入式多重继承
函数式编程 每个函数都是一个值 支持高阶函数、柯里化、样例化及模式匹配…
Scala是静态类型语言
安装
要求JDK环境
资源提供scala2.11.8 链接https://pan.baidu.com/s/1tc-bm5sF8ofhGlC5Kx4lxA 提取码:hei8
scala解释器 解压安装完毕后进入终端数据scala指令进入如下页面
idea配置
idea需要下载相关插件,在对应官网选择与自己ideal版本匹配的插件 https://plugins.jetbrains.com/plugin/1347-scala 进入官网———>选择versions——>选择对应版本下载(注意不要解压) 进入idea——>configure——>Plugins——>Install Plugin from Disk(选择你下在插件的路径)——>Restart IDE
Scala初体验
scala> object MyScala{
def main(args:Array[String]):Unit={
println("hello,world")
}
}
defined object MyScala
scala> MyScala.main(null)
hello,world
scala变量与常量
变量 赋值后可以改变,生命周期中可以被多次赋值 var 变量名称:类型=xxx 一般无需指定类型,Scala编译器会自动推断出类型
//变量定义会自动推断出类型
scala> var c=20
c: Int = 20
//当类型不匹配时会报错
scala> var c:Int="abc"
<console>:11: error: type mismatch;
found : String("abc")
required: Int
var c:Int="abc"
//当c为字符串时,再次赋值必须是字符串
scala> var c="abc"
c: String = abc
//报错
scala> c=40
<console>:12: error: type mismatch;
found : Int(40)
required: String
c=40
//赋值类型为字符串正常
scala> c="40"
c: String = 40
常量 赋值后不可变,类似于java中的final变量 val 常量名称:类型=xxx
//常量赋值后不可更改
scala> val k=50
k: Int = 50
//更改报错
scala> k=60
<console>:12: error: reassignment to val
k=60
//但可以直接使用
scala> k
res0: Int = 50
Scala数据类型
Scala与Java有着相同的原始数据类型
数据类型描述
Byte8位有符号整数。数值区间-128 ~ 127Short16位有符号整数。数值区间-32768 ~ 32767Int32位有符号整数。数值区间 -2147483648 ~ 2147483647Long64位有符号整数。 -9223372036854775808 ~ 9223372036854775807Float32位IEEE 754 单精度浮点数Double64位IEEE 754 双精度浮点数Char16位无符号Unicode字符。区间值为U+0000 ~ U+FFFFBooleantrue或falseString字符序列
Scala数据类型层次结构
Any:所有类型的超类(顶级类型)AnyVal:表示值类型的超类AnyRef:表示引用类型的超类,对应java.lang.ObjectUnit:表示无值,类似Java中的voidNothing:所有类型的子类Null:表示null或空引用
Scala循环控制
while循环
//while
var num: Int = 0;
while ( num < 100 ) {
println( num );
num = num + 1;
}
//do while
var num: Int = 0;
do {
println( num );
num = num + 5;
} while ( num < 200 )
for循环
//to
val num:Int = 10;
for ( i: Int <- 1 to num )
{
println( i * 100 );
}
//until
for { i: Int <- 1 until 100 }
{
val y = 2*i;
println( y );
}
until和to的区别如下,until不包含,to包含
Scala的break和continue
使用break跳出方法需要导包 import scala.util.control.Breaks._
//导包
scala> import scala.util.control.Breaks._
import scala.util.control.Breaks._
//scala中的break
scala> for (k:Int <- 1 to 10){
| if(k==5){
| break;
| }
| println(k)
| }
1
2
3
4
scala.util.control.BreakControl
//scala中的continue
scala> for (k:Int <- 1 to 10 ){
| breakable{
| if(k==5){
| break;
| }
| println(k)
| }
| }
1
2
3
4
6
7
8
9
10
for循环过滤
//使用if过滤多个条件之间使用分号分开
val num:Int = 10;
for ( i: Int <- 1 to num; if i%2==0;if i>5 )
{
println( i * 100 );
}
for循环返回值
for循环中的yield会把当前元素记下来,保存在集合中,循环结束后返回该集合
val num:Int = 10;
var retVal=for ( i: Int <- 1 to num; if i%2==0;if i>5 ) yield i;
for(a<-retVal){
println(a);
}
//输出6 8 10
Scala元组
可以包含不同类型的元素最多支持22个元素 (Tuple1~Tuple22)使用下划线“_"访问元素,“_1"表示第一个元素
//元组声明方式一
var tp1 = ("Mike", "123 ABC street", 58)
println(tp1._1)
println(tp1._2)
println(tp1._3)
//迭代元组
tp1.productIterator.foreach{ i =>println("Value = " + i )}
//元组声明方式二
var tp2 = new Tuple3("Mike", "123 ABC street", 58)
//元组声明方式三
def mike = "Mike" -> 5
//输出scala.Tuple2
mike.getClass
//将元组元素依次赋给三个变量
val(name, address, age) = tp1
println(name)
println(address)
println(age)