Scala之函数
Scala是一门计算机编程语言,一种类似java的编程语言,集成了面向对象编程和函数式编程的特性。
这门语言有什么用?Spark就是基于Scala开发的,而Spark是大数据开发方面使用的非常频繁。而且优点非常多,是现在非常主流的开发工具。可以这么说,少了Spark,大数据的大河江山就少了一半。
首先什么是函数,这里函数的意思和数学上函数的意思是一样的。
f(x)=ax+b
这里输入一个x,得到结果ax+b。这是最简单的函数,把ax+b当成Y,则
f(X)->Y,也记住f:X->Y
在Scala中也是一样的,函数就是这种形式。
Scala是函数式编程,那么函数对于Scala就非常的重要。函数可以非常五个等级
第一等级:最普通的函数,表现形式还是数学上的函数形式:
f:X=>Y
第二等级:把函数包装起来,变成一个变量,也可以说是一个东西,比如一个球。要用的是绑上一个输入值,就可以丢到其他地方
A=(f:X=>Y)。使用的时候A(X)
第三等级:函数没有名字,也叫匿名函数,形式就是
X=>Y
第四等级:当函数当为输入值,放到函数中。表现形式就是
f1:(X)=>C。这里X=(f2:A=>B)。
最后就变成f1:(f2:A=>B)=>C
这里名字就没什么意义了,所以就变成了
f(A=>B)=>C
第五等级:把函数当初一个返回值放到函数中。表现形式就是
f:(X)=>Y。这里Y=(f:A=>B)。
最后变成f:(X)=>(A=>B)
这种表现形式就极大了扩展了函数边界。在计算机中想要比较两种不同的东西,比如苹果和牛奶,就要先把苹果变成苹果汁再进行比较,这样就要有2个函数来共同完成这件事。当苹果变成冰块的时候,原来的方法就不管用了,就要再造一个方法。再scala中就可以不用这样。
f1:(苹果,牛奶)=>f2:(苹果汁,牛奶)=>结果
f1:(冰块,牛奶)=>f3:(水,牛奶)=>结果
在Scala中就不用这样
f:(苹果)(牛奶)=>(含有苹果汁的函数)(牛奶)=>结果
f:(冰块)(牛奶)=>(含有水的函数)(牛奶)=>结果
一个函数搞定。极大的简化了流程。增加了可用性,这就是函数的柯里化的实际意义。
简化计算过程的案例还有:假如原来有5个计算公式
1:f:(A)=>B
2:f:(B)=>C
3:f:(C)=>D
4:f:(D)=>E
5:f:(E)=>F
在Scala中就可以简化成
(((((A)=>B)=>C)=>D)=>E)=>F
看上去并没有简化多少,但是在实际中,数据是大量的,如果用前面5个计算公式计算,计算5次那么数据就要全部扫描5遍
在Scala中就可以把计算公式叠加,5个公式变成一个公式,这样数据就只需要扫描一遍。当然这里也是有条件的,这5个公式必须是懒公式
在大数据时代要的就是速度快。因为数据实在是太多了。所以前辈们就想了各种办法简化他们。这让我想起吴军老师说的,古时候天难的算法,在出现了99乘法口诀表之后,我们现在小学生都能算。现在很多工具简化了流程,增加了效率,这些工具就放在那儿,如果我们不学习,我们只能活在过去。而现在我们要做的仅仅是站在巨人的肩膀上。