纯函数是不依赖于i/o和超出函数范围的其他值的函数。并且只取决于在函数的参数中传递的值。
让我们进一步详细说明函数,
Scala的纯函数依赖于:
传递给它的参数。
函数的算法(操作)。
纯函数独立于:
任何外部I / O,例如输入外围设备,数据库,文件,服务等。而且,它不能为任何输出提供任何输出。
它不能使用函数范围之外的任何值。同样,不能在其范围之外修改任何变量。
根据Alvin Alexander的定义,纯函数=输出取决于输入+无副作用
纯函数的一些示例是:
isEmpty()
sqrt()
现在,让我们创建一个纯函数:
示例:里程计算器
object MyObject { def mileageCal(distance:Int, fuel:Int): Float = { val mileage = distance/fuel return (mileage); } def main(args: Array[String]) { println("我的自行车的行驶里程为: " + mileageCal(342, 9)) } }
输出:
我的自行车的行驶里程为: 38.0
在上面的代码中,我们创建了一个名为的函数mileageCal()
,该函数接受距离和fuel的两个整数值。该函数将使用公式miles = distance / fuel来查找里程。然后该函数将该值返回给调用函数。
所有不纯的函数都是不纯的。这使得非纯函数的定义为“依赖于i/o或函数作用域以外的其他值以及参数值的函数”。
现在,让我们创建一个不纯函数:
示例:常数乘数
object MyObject { val constant = 12.4; def constantMul(value:Int): Double = { val result = value*constant; return (result); } def main(args: Array[String]) { println("常数乘数的结果是: " + constantMul(34)) } }
输出:
常数乘数的结果是: 421.6
在上面的代码中,我们创建了一个constantMul()
函数,该函数接受与对象中定义的值相乘的参数值,即该值取决于函数范围之外的值。
在Scala中使用纯函数的一些好处:
易于组合:纯函数是独立于I/O的,因此可以很容易地与其他函数组合。
易于测试和调试:由于它们独立于外部值,因此它们的测试和调试很容易,因为您不需要查看函数的范围之外。
它们不会更改输入值和超出其范围的其他值。