scala语言-学习日记(一)
Scala语言是一个较为抽象的语言,因为这门语言结合了面向对象的编程思想和面向函数的一门语言;
函数式编程功能强大,用起来倍爽,所以一定熟练掌握;
Scala是一种针对JVM 将面向函数和面向对象技术组合在一起的编程语言。Scala编程语言近来抓住了很多开发者的眼球。它看起来像是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格。Scala融汇了许多前所未有的特性,让开发者能够很好的而同时又运行于JVM之上。随着大数据的日益发展,scala必定会成为必不可少的开发语言。
为什么要学习scala?
1、代码规范而且好看:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验。
2、速度快:Scala语言表达能力强,一行代码抵得上Java多行,开发速度快;Scala是静态编译的,所以和JRuby,Groovy比起来速度会快很多。
3、能融合到Hadoop生态圈
4.因为我们要学习的spark和kafka等它的底层语言是scala写的,学习scala能够有助于我们编写spark代码及阅读源码。
Scala的安装
首先安装jdk,推荐1.8版本
下载scala-2.10.6.msi文件解压安装即可
注:环境变量会自动进行安装
Scala基础学习
学习任何一门语言,都有着相同的路数。所以对于现在的我们而言。Scala的学习相对来说会容易一些。
Scala的数据类型
定义变量
val name=”max”
注意:scala有个原则就是极简原则,不用写的东西一概不写。
定义变量有两种形式
一种是像上面那样用val修饰另一种是var进行修饰
val 定义的变量不可变相当与java中的final
用表达式进行赋值
Val x=1
Val y=if(x>0) 1 else -1
混和表达式
Val 1 =if (x>0) 1 else “jay”
需要注意的是any是所有的父类,相当于java里的object
else缺失的表达式
val p=if (x>5) 1
注意:Unit相当于java中的void
if 语句定义变量加深学习
请编写一个用if, else if, else赋值的例子
Val x=0
Val z={
…
}
For 循环
For循环区间:
Val res=1 to 10
for(i<-res){
println(i)
}
for 循环数组
val arr=Array(“a”,”b”,”c”)
for(i<-arr)
println(i)
高级for循环
for (i<- 1 to 4;j<- 1 to 4 if i!=j)
println(10*i+j+” ”)
使用for循环生成一个数组
Val z=for (i<-1 to 3) yield i*10
加深练习
需求说明:定义一个数组val a1=Array(1,2,3,4,5,6,7,8,9)把其中的偶数取出。
懒加载
Val lazyVal={println(“I am too lazy”);1}
lazy val lazyVal={println(“I am too lazy”);1}
方法与函数
定义一个方法:
def method(a:Int,b:Int):Int=a*b
method(3,5)
定义一个函数:
Val f1=(x:Int,y:Int)=>x+y
f1 (1,2)
匿名函数
(x:Int,y:Int)=>x+y
匿名函数举例
方法和函数的区别
在函数式编程语言中,函数是“头等公民”,它可以像任何其他数据类型一样被传递和操作,函数可以在方法中传递。
def m1(f(Int,Int)=>Int)={f(2,3)}
val f1=(x:Int,y:Int)=>x+y
val f1=(x:Int,y:Int)=>x+y
val a=m1(f1)
val b=m1(f2)
通过方法转变为函数
集合
List
不可变的list
可变的list
val lst0=ListBuffer[Int](1,2,3)
val lst1=new ListBuffer[Int]
lst1+=4 lst1发生改变
lst1+=5
val lst4=lst1:+6 lst1没有改变
Set
Map
Tuple
Val t=()