完成一项功能;返回void或break循环?

时间:2013-10-14 09:27:09

标签: java android performance

我向您展示了两个例子:

示例A:

protected void mostrarCms(int idCms) {
    LinearLayout variableContent = (LinearLayout) this.findViewById(R.id.variableContent);

    loopDeCms:
    for (int i=0; i<variableContent.getChildCount();i++){
        View fillActual = variableContent.getChildAt(i);
        if (fillActual instanceof WebView){
            WebView wbActual = (WebView) fillActual;
            if (wbActual.getContentDescription().toString().equals("cms_id_"+idCms)){
                wbActual.setVisibility(View.VISIBLE);
                break loopDeCms;
            } 
        }
    } 
}

例B:

protected void mostrarCms(int idCms) {
    LinearLayout variableContent = (LinearLayout) productView.this.findViewById(R.id.variableContent);

    for (int i=0; i<variableContent.getChildCount();i++){
        View fillActual = variableContent.getChildAt(i);
        if (fillActual instanceof WebView){
            WebView wbActual = (WebView) fillActual;
            if (wbActual.getContentDescription().toString().equals("cms_id_"+idCms)){
                wbActual.setVisibility(View.VISIBLE);
                return;
            } 
        }
    } 
}

推荐哪一个?请注意,此代码来自Android,因此使用/释放或不释放资源,实际上很重要。

4 个答案:

答案 0 :(得分:3)

如果您想退出该功能,那么return是最好的选择。

break只会让您退出直接循环,因此如果将来的更改意味着您的循环嵌套在另一个循环中,您的控制流可能会中断。始终能够尽可能地证明您的代码。

答案 1 :(得分:2)

由于该方法在循环之后不执行任何其他操作(并且不应该),因此使用return是更清晰的选项。使用break意味着处理将在循环后继续。

答案 2 :(得分:1)

在这种特殊情况下,它并不重要。我想那是一种风格问题。我会使用break所以如果在for循环之后添加新代码,则循环将结束,而不是整个方法。

考虑将扩展此代码并在for循环后添加一些功能的编码器。如果您使用return语句,编码器将不得不浪费时间来确定方法是否必须返回,或者出于样式原因您只是优先选择break。如果您使用break未来的编码器(可能是您)将更加轻松地在for循环后添加逻辑。这就是为什么我更喜欢break而不是return

性能方面,由于两个原因,它没有任何区别:

  1. 这里可能没有性能问题,因为这是非常小的。
  2. 即使存在性能问题 - 编译器也可能知道如何优化。
  3. 它在资源方面也不重要,因为无论哪种方式,方法的范围都会完成,并且当资源超出范围时,允许对资源进行垃圾收集。

答案 3 :(得分:0)

我认为这只是个人的好感。我个人试图避免在函数结尾附近的任何地方返回语句。如果你想为这个函数添加代码或扩展功能,函数头部的返回可能会让你头疼。