是给一个函数一个额外的参数更好,还是让参数成为静态的更好?
Is it better to give a function an additional parameter, or to make the parameter static?
很多次我遇到过这样的情况,我多次调用一个方法,一个参数总是完全相同,我需要添加一些在我的主要方法中定义的额外参数。我永远不确定如何处理附加参数。似乎将参数设为静态以使代码更清晰可能是一个更好的主意,但是静态变量并不是很好。不过,在某些情况下,添加参数可能会导致参数列表非常长,这在某种程度上是不必要的,而且我认为当您的函数很短、经常调用并且有很多参数时,速度也会受到影响。
这是让我思考这个问题的最新代码 (kotlin),但我已经 运行 用不同的语言深入研究这个问题。
tailrec fun getAncestor(ind: Int, parent: IntArray): Int {
if (parent[ind] == ind) return ind else return getAncestor(parent[ind], parent);
}
将parent设为静态变量而不将其作为方法的参数是否更好? (假设每次调用此方法时,第二个参数都是相同的。我通常只编写 100 行的短代码文件以进行竞争性编程,因此该方法不可能与不同的第二个参数重用)
在我看来,这取决于您喜欢的编码范式。例如,如果您希望您的代码符合函数式范例,那么您的代码现在就很好(关于参数),但是,如果您不关心函数式编程,那么将该参数提取出来,作为常数是可以的。我看不出为什么它应该是坏的。如果您担心性能,您可以将其声明为惰性的,但我想除此之外没问题。
一般来说,如果您正在处理一个项目,您会希望远离静态变量,因为当项目开始扩大并变得越来越大时,将很难跟踪静态变量这将使调试变得非常困难。
在竞争性编程中,我建议采用更快的方法。
很多次我遇到过这样的情况,我多次调用一个方法,一个参数总是完全相同,我需要添加一些在我的主要方法中定义的额外参数。我永远不确定如何处理附加参数。似乎将参数设为静态以使代码更清晰可能是一个更好的主意,但是静态变量并不是很好。不过,在某些情况下,添加参数可能会导致参数列表非常长,这在某种程度上是不必要的,而且我认为当您的函数很短、经常调用并且有很多参数时,速度也会受到影响。
这是让我思考这个问题的最新代码 (kotlin),但我已经 运行 用不同的语言深入研究这个问题。
tailrec fun getAncestor(ind: Int, parent: IntArray): Int {
if (parent[ind] == ind) return ind else return getAncestor(parent[ind], parent);
}
将parent设为静态变量而不将其作为方法的参数是否更好? (假设每次调用此方法时,第二个参数都是相同的。我通常只编写 100 行的短代码文件以进行竞争性编程,因此该方法不可能与不同的第二个参数重用)
在我看来,这取决于您喜欢的编码范式。例如,如果您希望您的代码符合函数式范例,那么您的代码现在就很好(关于参数),但是,如果您不关心函数式编程,那么将该参数提取出来,作为常数是可以的。我看不出为什么它应该是坏的。如果您担心性能,您可以将其声明为惰性的,但我想除此之外没问题。
一般来说,如果您正在处理一个项目,您会希望远离静态变量,因为当项目开始扩大并变得越来越大时,将很难跟踪静态变量这将使调试变得非常困难。 在竞争性编程中,我建议采用更快的方法。