Scala中的纯函数
在任何编程语言中,都有两种类型的函数:
1. 纯函数
2. 不纯函数
两者之间有一个基本区别,即纯函数不会更改它传递的变量,而不纯函数会。例如,存在一个将输入增加 10 的函数。因此,有两种可能性,第一种是它可以直接返回 x + 10 ,因此 x 不会改变,而在另一种情况下,它可以与x这样的语句一起使用= x + 10然后返回 x,从而改变 x 的值。所以,第一个函数是纯的,而另一个是不纯的。
scala中的纯函数
如果一个函数对于相同的参数值总是返回相同的结果并且它没有像修改参数(或全局变量)或输出某些东西这样的副作用,则称为纯函数。
它们是那些除了作为输入给出的值之外不读取任何其他值并遵循其内部算法来产生输出的函数。纯函数没有副作用,即它不会隐式更改变量的值,因此最终不会更改输入的值。
这些 Scala String 方法也是纯函数:
- 是空的
- 长度
- 子串
可以制作一个纯函数,如以下程序代码所示:
示例 1:
Scala
// Pure function In Scala
object GFG
{
// Driver code
def main(args: Array[String])
{
def square(a:Int) = {
var b:Int = a * a;
println("Square of the number is " + b);
println("Number is " + a);
}
square(4);
}
}
Scala
// Scala Pure Function
object GFG
{
// Driver code
def main(args: Array[String])
{
// Function 1
def add(a:Int, b:Int):Int = {
var c:Int = a + b;
return c;
}
// Function 2
def multiply(a:Int, b:Int):Int = {
var c:Int = a * b;
return c;
}
// Calculating same value but changing
// the position of the functions
println("Output in case 1 :" +
add(1, 2) * multiply(3, 4));
println("Output in case 2 :" +
multiply(4, 3) * add(2, 1));
}
}
输出:
Square of the number is 16
Number is 4
现在,我们知道此函数不会隐式更改变量,因此我们以不同的方式添加两个不同函数的结果,如下所示:
示例 2:
斯卡拉
// Scala Pure Function
object GFG
{
// Driver code
def main(args: Array[String])
{
// Function 1
def add(a:Int, b:Int):Int = {
var c:Int = a + b;
return c;
}
// Function 2
def multiply(a:Int, b:Int):Int = {
var c:Int = a * b;
return c;
}
// Calculating same value but changing
// the position of the functions
println("Output in case 1 :" +
add(1, 2) * multiply(3, 4));
println("Output in case 2 :" +
multiply(4, 3) * add(2, 1));
}
}
输出:
Output in case 1 :36
Output in case 2 :36
现在,由于两种情况的输出相同,因此证明了 scala 中纯函数的输入没有隐式更改。
以下是使用纯函数的好处:
- 它们不会导致输入的任何隐式变化。
- 它们更容易测试。
- 它们可以很容易地调试。