哪种方法表现出更好的性能:封装到方法中与否?

时间:2015-04-16 11:55:26

标签: java objective-c performance methods

当我编写代码的时候,有时候当我需要选择是否应该创建一个单独的方法(优点是我可以在以后使用我自己的语法)或实现已经存在的复杂方法时,我会碰到这种情况。少了几行代码。)

以下是使用不同编程语言(Objective-C和Java)解释问题的示例。

Objective-C示例:

-(double) maxValueFinder: (NSMutableArray *)data {
double max = [[data valueForKeyPath:@"@max.intValue"] doubleValue];
return maxValue;
}

然后:

...
double max = [self maxValueFinder:data];
...

或者每次都试着打电话:

...
double max = [[data valueForKeyPath:@"@max.intValue"] doubleValue];
...

Java示例:

public static double maxFinder (ArrayList<Double> data) {
double maxValue = Collections.max(data);
return maxValue;
}

然后:

...
double max = maxFinder(data);
...

或者每次都试着打电话:

...
double max = Collections.max(data);
...

或更复杂的案例,使我的问题更加尖锐:

//using jsoup
public static Element getElement(Document content){
Element link = content.getElementsByTag("a").first();
return link;
}

或每次:

...
Element link = content.getElementsByTag("a").first();
...

哪种方法花费更少的资源(性能,内存)还是相同的?

2 个答案:

答案 0 :(得分:2)

绝对没关系。至少在您的Java情况下,您无用地重新创建现有功能,这很荒谬。

您应首先查看标准库中是否包含该功能,然后查看现有的知名库是否具有该功能,并且只有在此之后您才应考虑自己编写实现(特别是对于更复杂的功能)。

性能与您的问题无关,除非您花费在重新创建现有功能上的时间越多,您花在实际新代码上的时间就越少(因此降低了编程性能)。

至于创建包装器方法,这在某些情况下很有用,特别是如果实际的方法调用经常被链接,并且您发现自己在代码中拥有越来越多的那些。但是代码清晰度和编写过多的代码之间存在微妙的差异。

public void parseHtml() {
    parseFirstPart();
    parseSecondPart();
    parseThirdPart();
}

如果我们假设每个parse方法只包含1个或2个方法调用,那么添加这些额外的方法很可能是无用的,因为通过适当的注释可以实现相同的目的。如果parse方法包含大量调用,则从中提取方法是有意义的。没有关于它的规则,这是你在编程时学到的技能(当然,很大程度上取决于你所看到的漂亮的代码。

答案 1 :(得分:-1)

  • 重建现有功能毫无用处。
  • 因为这些功能已在库中实现。
  • 如果你谈论性能,那么两种情况你都在加载同一行 double maxValue = Collections.max(data);
  • 在两种情况下,性能都无关紧要,因为您正在加载相同的代码。