如何使用默认参数实现功能

时间:2014-11-16 08:49:32

标签: java function optimization

在Java中,我在网上搜索了如何使用默认参数创建函数,我了解到我需要再次编写函数,参数较少。

示例:

f (a, b) {..}

f (a) {..}

f () {..}

现在,有两种编码这些功能的方法摆在我面前:

  1. 将算法复制粘贴到3种方法中并进行修改,用我需要的常量值替换参数:

    f (a, b) { //algorithm with a and b }
    
    f (a) { //algorithm with a and a constant }
    
    f () { //algorithm with 2 constants }
    

    优势:优化运行速度

    缺点:当我需要对我的功能进行修改时,我将不得不多次更改代码我已经写了这个功能(这里有3次)。

  2. 通过在参数中给出常量来返回上一个函数:

    f (a, b) { //algorithm }
    
    f (a) { return f (a, 1); }
    
    f () { return f ("x"); }
    

    优点:易于阅读,代码灵活。

    缺点:当一个函数调用另一个函数时,它需要更多的运行时间和更多的内存(也许我对这一点感到错误,我真的很想)。

  3. 哪种方式更好?

1 个答案:

答案 0 :(得分:3)

当然你应该更喜欢第二种方式。复制代码是你应该避免的。它使您的代码更难维护,并且是引入错误的最佳方式。你在这里做的是过早的微观优化:

  • 它不会导致任何明显的性能差异
  • 它可能会导致没有任何区别,因为JIT将在第二个解决方案中内联调用其他方法
  • 它甚至可能更慢,因为JIT可能无法优化最常用的相同代码块之一

过早优化是万恶之源,你的问题就是另一个完美的例子。

在出现性能问题之前,您甚至不应该考虑优化代码,并且您已经证明问题出现在该代码中。 通常,性能问题来自IO(文件读取,数据库查询等),或来自大型数据集上的错误算法(O(n2)而不是O(n))。不是来自1或2个方法调用。