Is it better coding practice to define variables outside a foreach even though more verbose?

前端 未结 12 2193
栀梦
栀梦 2020-12-10 10:39

In the following examples:

  • the first seems more verbose but less wasteful of resources
  • the second is less verbose bu
相关标签:
12条回答
  • 2020-12-10 11:15

    The second form is no more wasteful - it's simply better.

    There's no advantage to declaring the variables outside the loop, unless you want to maintain their values between iterations.

    (Note that usually this makes no behavioural difference, but that's not true if the variables are being captured by a lambda expression or anonymous method.)

    0 讨论(0)
  • 2020-12-10 11:16

    Personally, I think it's the best practice to declare variables in the tightest scope possible, given their usage.

    This provides many benefits:

    1. It's easier for refactoring, since extracting a method is simpler when the variables are already in the same scope.
    2. The variable usage is more clear, which will lead to more reliable code.

    The only (potential) disadvantage would be the extra variable declaration - however, the JIT tends to optimize this issue away, so it's one I wouldn't necessarily worry about in real work.

    The one exception to this:

    If your variable is going to be adding a lot of GC pressure, and if this can be avoided by reusing the same object instance through the foreach/for loop, and if the GC pressure is causing measured performance problems, I'd lift it into the outer scope.

    0 讨论(0)
  • 2020-12-10 11:19

    Those are both wasteful and verbose.

    foreach (var name in names)
    {
       Console.WriteLine("{0}1, {0}2, {0}3", name);
    }
    

    .

    </tongueincheek>
    
    0 讨论(0)
  • 2020-12-10 11:20

    I've found that 'hoisting' declarations out of loops is typically a better long-term strategy for maintenance. The compiler will usually sort things out acceptably for performance.

    0 讨论(0)
  • 2020-12-10 11:21

    They are both virtually the same as far as performance goes (strings are immutable), but as for readability... I'd say neither is very good. You could easily just do it all within the Console.WriteLine.

    Perhaps you can post the real problem instead of an example?

    0 讨论(0)
  • 2020-12-10 11:22

    Depending on language and compiler it may or may not be the same. For C# I expect the resulting code to be very similar.

    My own philosophy on this is simple:

    Optimize for ease of understanding.

    Anything else is premature optimization! The biggest bottleneck in most development is time and attention of the developer. If you absolutely must squeeze out every last CPU cycle then by all means do so, but unless you have a compelling business need to do or are writing a critical component (common library, operating system kernel, etc) you are better off waiting until you can benchmark the finished program. At that time optimizing a few of the most costly routines is justified, before then it's almost certainly a waste of time.

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