if->return vs. if->else efficiency

后端 未结 6 1152
一整个雨季
一整个雨季 2020-12-28 12:35

This may sound like a silly question, and I hesitated to post it, but still: if something needs to run only in a certain condition, which of these is more efficient:

相关标签:
6条回答
  • 2020-12-28 13:01

    They are equally efficient, but B is usually considered to give better readability, especially when used to eliminate several nested conditions.

    0 讨论(0)
  • 2020-12-28 13:08

    It's a style thing. The performance is not relevant; both produce nearly identical machine code.

    A few considerations on the style:

    If you want to avoid 'horizontal programming', you might want to prefer B to avoid nested conditions. For example, if you want to add exceptions without affecting the flow of the method too much:

    A:

    public String getDescription(MyObject obj) {
        if (obj == null) {
            return "";
        } else {
            if (!obj.isValid()) {
                return "invalid";
            } else {
                ...
            }
        }
     }
    

    B:

    public String getDescription(MyObject obj) {
        if (obj == null) {
            return "";
        }
    
        if (!obj.isValid()) {
            return "invalid";
        }
    
        ....
     }
    

    But the difference is minimal if you ask me. Definitely not worth a 'code style war'.

    0 讨论(0)
  • 2020-12-28 13:09

    The real question is, should you really care?

    I say NO! It's more important to have better readable code than doing some micro-optimization.

    0 讨论(0)
  • 2020-12-28 13:10

    While I agree that you should choose readability first, I'll go ahead and add a little info: In C#, there is no difference. It compiles to the same thing (when optimized by building Release mode). Other languages? Who knows, I'm sure some of them consider it different, but the chances that you actually need to be concerned about it is slim to none.

    0 讨论(0)
  • 2020-12-28 13:18

    Please pick the thing that is most readable. Performance optimizations at this level are hardly ever an issue. Even really performance sensitive parts of frameworks (such as the .NET framework) do not benefit from such an micro optimization.

    0 讨论(0)
  • 2020-12-28 13:18

    Performance is more or less the same in both the cases. Therefore it becomes more of a style or preference question.

    I personally prefer writing if--> return i.e. case B because it makes the code to look cleaner and easy to read specially if the code comprises of complex nested conditions.

    0 讨论(0)
提交回复
热议问题