我在写一些scala代码:
def getOpponentOf(request)
= if (getPlayerTupleOf(request)._1.id == request.id)
getPlayerTupleOf(request)._1
else getPlayerTupleOf(request)._2
现在,我的当务之急是:“嘿,为什么我不定义一个引用getPlayerTuple的局部变量,然后再使用该引用。
但是然后我将不得不使用{}范围,而不是()(它更具功能性?)。假设函数getPlayerTupleOf也是完美的功能,即使用()范围,无副作用等。
例如,执行上述操作与此相对时,性能/编译器的含义是什么:
def getOpponentOf(request) = {
val playerTuple = getPlayerTupleOf(request)
if (playerTuple._1.id == request.id)
playerTuple._1
else playerTuple._2
}
谢谢,马克
使用块{}并不反对函数式编程。Scala的“ val”声明等同于其他功能语言(例如ML,F#)中存在的“ let”绑定,因此它们完全是“功能”概念。没有功能的是使用定义为var而不是val的实变量。
关于性能:编译器通常无法确定您的方法是否具有副作用,并且可以对“具有相同参数的多个调用”进行“缓存”(例如,以局部“变量”的形式)。因此,编译后的代码将有效地多次调用该方法。JIT仍然可以选择在运行时有效地对其进行优化,并且它可能会或可能不会发生,这取决于您的方法的实现方式和其他因素。
我认为还需要考虑其他方面:简洁,可维护性,第二个版本在这里胜出:没有代码重复,并且变量名称可以帮助理解代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句