我正在编写一些scala代码:
def getOpponentOf(request)
= if (getPlayerTupleOf(request)._1.id == request.id)
getPlayerTupleOf(request)._1
else getPlayerTupleOf(request)._2
Run Code Online (Sandbox Code Playgroud)
现在,我的命令主意是:"嘿,为什么我不会定义一个引用getPlayerTuple一次的局部变量然后使用该引用.
但是,我将不得不使用{}范围,而不是()(其是多个功能?)假设函数getPlayerTupleOf是完美的功能太即,使用免费()范围,副作用等.
例如,执行上述操作与此相比,性能/编译器含义是什么:
def getOpponentOf(request) = {
val playerTuple = getPlayerTupleOf(request)
if (playerTuple._1.id == request.id)
playerTuple._1
else playerTuple._2
}
Run Code Online (Sandbox Code Playgroud)
谢谢,马克
使用块{}不反对函数式编程.Scala"val"声明等同于其他函数语言中存在的"let"绑定(例如ML,F#),因此它们是完美的"功能"概念.不起作用的是使用定义为var而不是val的实变量.
关于性能:编译器通常不能确定您的方法是无副作用的,并且可以"缓存"具有相同参数的多个调用(例如,以本地"变量"的形式).因此,编译后的代码会在编写代码时有效地调用该方法.JIT仍然可以选择在运行时有效地优化它,它可能会也可能不会发生,具体取决于您的方法的实现方式和其他因素.
我认为还有其他方面需要考虑:简洁性,可维护性,第二个版本在这里获胜:没有代码重复,变量的名称可以帮助理解代码.