最近在学Scala,准备入坑大数据的学习了,感觉Spark比Hadoop火一点,加上我早已经学完Java了,所以我想尝试新的挑战,就去学习Scala这门语言了.
因为Spark和Kafka啥的就是用Scala写的源码,加上我想学习一下函数式编程,不怎么想用Java的lambda表达式,尽管Java8之后这些功能都跟上来了.综上所述,我最终选择了学习Scala.其实语言只是其次的,只是一门工具而已,当然也要好好掌握它的精髓,不过更重要的是借助Scala这门神奇的语言带我入门大数据的学习,这样才是关键.
这还是我关于Scala的第一篇博客,我是边看书边看视频边敲代码来学习的,后期再跟进项目吧,先系统学一遍再说.先简单介绍一下Scala吧!
名称来自scalable language,意为可伸缩的语言
是一门综合了面向对象和函数式编程概念的静态类型的编程语言
scala编程便于扩展和定制
scala有自己的类库
scala能屈能伸(结合了面向对象和函数式编程).在scala中,函数值就是对象
每一个值都是对象,每一个操作都是方法调用
函数式编程语言
1.函数是一等(first-class)的值
2.程序中的操作应该将输入值映射成输出值,而不是当场(in place)修改数据(方法不能有副作用,指称透明)
不可变数据结构是函数式编程的基石之一,如不可变的list,tuple,map,set
特点:兼容性,精简性,高级抽象,静态类型
scala和java可以互相操作,也就是说可以互相调用各自的类库,可以在项目中采用Scala和Java混编.
配置环境和在idea里面建项目就不说了,都可以搜到,这里直接看一个我写的分数操作的例子
package Chapter1
object test5 extends App {
//构造分数以及各种运算操作
class Rational(n: Int, d: Int) {
require(d != 0)
private val g = gcd(n.abs, d.abs)
val numer: Int = n / g
val denom: Int = d / g
def this(n: Int) = this(n, 1) // auxiliary constructor
//方法重载
def +(i: Int): Rational =
new Rational(numer + denom * i, denom)
def +(that: Rational): Rational =
new Rational(
numer * that.denom + that.numer * denom,
denom * that.denom
)
def -(i: Int): Rational =
new Rational(numer - i * denom, denom)
def -(that: Rational): Rational =
new Rational(
numer * that.denom - that.numer * denom,
denom * that.denom
)
def *(i: Int): Rational =
new Rational(i * numer, denom)
def *(that: Rational): Rational =
new Rational(
numer * that.numer,
denom * that.denom
)
def /(i: Int): Rational =
new Rational(numer, denom * i)
def /(that: Rational): Rational =
new Rational(
numer * that.denom,
denom * that.numer
)
//重写toString方法
override def toString =
if (denom == 1) numer + "" else numer + "/" + denom
//找最大公约数,便于后期化简
private def gcd(a: Int, b: Int): Int =
if (b == 0) a else gcd(b, a % b)
}
//2*x<=>2.*(x),Int类并没有接收Rational类的乘法方法,因为Rational并不是scala里面的标准类
//隐式转换,可以执行2*x操作了
//不能定义在Rational类里面,需要定义在作用域里面,否则无效
implicit def intToRational(x: Int) = new Rational(x)
val x = new Rational(2, 1)
val y = new Rational(3, 9)
println(x + y)
println(x - y)
println(x * y)
println(x / y)
println(x / 2)
println(2 * x)
}
输出:
7/3
5/3
2/3
6
1
4
入坑大数据,从Scala开始!