Scala是将面向对象思想与函数式编程思想集一身的编程语言,特别是在大数据和流式处理方面的快速发展,基于Scala语言一些重要的开源框架随之发布,比如:Spark,Kafka等。学习Scala的重要性无须多言,博主打算写三个系列的Scala文章:
1.Scala Turtuial-基础系列
2.Intermediate Scala-进阶系列
3.Advanced Scala-高级系列
今天是Scala Turtuial系列的基本语言的介绍,废话少说直接撸代码。
在详细讲解Scala的基本特性之前,我们需要搭建Scala的开发环境和编译环境,基本语法推荐大家使用scala自带的交互式环境来学习,随着学习的深入和代码量大的增多,后续可以选择Idea、Eclipse和Emacs来作为自己的开发环境。
Scala是基于JVM上运行,所以我们首先要搭建JVM 运行环境。这个网上很多教程,自己参考。下载Scala-2.11.8.
tar -zxf scala-2.11.8.tgz
mv scala-2.11.8 /opt/soft
#配置SCALA环境设置
emacs /etc/profile
export SCALA_HOME=/opt/soft/scala-2.11.8
export PATH=$SCALA_HOME/bin:$PATH
#使其生效
source /etc/profile
#验证scala版本
scala -version
Scala中由两种类型的变量:可变变量和不可变变量。可变变量是变量被赋值后,变量的值可以随着程序的运行而改变;不可变变量一旦被赋值,在整个运行过程中不能被改变。可变变量通过var进行定义,不可变变量通过val进行定义。通过_占位符来初始化为默认null。注:Scala变量在进行定义时必须初始化。
scala> val test="brian lv"
test: String = brian lv
scala> test="eric lv"
<console>:12: error: reassignment to val
test="eric lv"
^
scala> var test="brian lv"
test: String = brian lv
scala> test="eric lv"
test: String = eric lv
scala> var test:Float = _
test: Float = 0.0
scala> var test:Int = _
test: Int = 0
scala> var test:Char = _
test: Char = ?
scala> var test:String = _
test: String = null
lazy修饰的的变量只有在使用时才会被复制,lazy变量只能修饰不可变变量。
scala> lazy val test="brian lv"
test: String = <lazy>
scala> test
res1: String = brian lv
lazy修饰的变量,在定义该变量时并没有赋值而是在使用时进行赋值的。
1.Byte 8位有符号的整数
2.Short 16位有符号的整数
3.Int 32位有符号的整数
4.Long 64位有符号的整数
5.Char 16位无符号数
6.String
7.Float 32位浮点数
8.Double 64位浮点数
9.Boolean 布尔型
基本数据类型使用原则:
scala> 1==1
res5: Boolean = true
scala> 1==1.0
res6: Boolean = true
scala> val x = new String("hello")
x: String = hello
scala> val y = new String("hello")
y: String = hello
#等同于==
scala> x.equals(y)
res10: Boolean = true
scala> x.eq(y)
res11: Boolean = false
scala> x.toUpperCase()
res15: String = HELLO
scala> x.reverse
res16: String = olleh
scala> "hello".drop(3)
res17: String = lo
scala> 1*10-2::2::Nil
res19: List[Int] = List(8, 2)
#::代表List的构造,Nil代表List构造结束,:::代表List拼接在一起。
scala> 1*10-2::2::Nil:::List(89,89)
res20: List[Int] = List(8, 2, 89, 89)
scala> val test = ("hello","world","brian")
test: (String, String, String) = (hello,world,brian)
scala> val (o,n,e) = test
o: String = hello
n: String = world
e: String = brian
scala> test._1
res24: String = hello
scala> test._2
res25: String = world
scala中有个比较特殊的类型即符号类型,通过单引号’来表现符号类型。符号类型主要在模式匹配和内容判断比较重要。
scala> val test='scala
test: Symbol = 'scala
scala> if(test=='scala){
| println("test value is scala")
| }else{
| println("test value is "+test)
| }
test value is scala
Scala的程序控制和其他C++,Java的没什么太大区别。在形式上区别比较大的是,for语句。
for(i<-表达式){}
scala> for(i<-1 to 5) println("i==="+i)
i===1
i===2
i===3
i===4
i===5
scala> for(i<-1 until 3) println("i=="+i)
i==1
i==2
#2为step
scala> for(i<-1 until (5,2)) println("i=="+i)
i==1
i==3
scala> for(i<-1 to (5,2)) println("i=="+i)
i==1
i==3
i==5
scala> for(i<-1 to (5,1) if(i%2==0);if(i>2)) println("i=="+i)
i==4
<-代表生成器,1 to 5相当于1.to(5)通过隐式转换RichInt类型。
Scala的语言很简洁,也很灵活,在学习的路途中多多实战和思考。我们将介绍Scala Turtuial-集合