Why avoid increment (“++”) and decrement (“--”) operators in JavaScript?

前端 未结 16 1002
庸人自扰
庸人自扰 2020-11-22 06:23

One of the tips for jslint tool is:

++ and --
The ++ (increment) and -- (decrement) operators have been known to contribute

相关标签:
16条回答
  • 2020-11-22 06:39

    In my experience, ++i or i++ has never caused confusion other than when first learning about how the operator works. It is essential for the most basic for loops and while loops that are taught by any highschool or college course taught in languages where you can use the operator. I personally find doing something like what is below to look and read better than something with a++ being on a separate line.

    while ( a < 10 ){
        array[a++] = val
    }

    In the end it is a style preference and not anything more, what is more important is that when you do this in your code you stay consistent so that others working on the same code can follow and not have to process the same functionality in different ways.

    Also, Crockford seems to use i-=1, which I find to be harder to read than --i or i--

    0 讨论(0)
  • 2020-11-22 06:42

    My view is to always use ++ and -- by themselves on a single line, as in:

    i++;
    array[i] = foo;
    

    instead of

    array[++i] = foo;
    

    Anything beyond that can be confusing to some programmers and is just not worth it in my view. For loops are an exception, as the use of the increment operator is idiomatic and thus always clear.

    0 讨论(0)
  • 2020-11-22 06:43

    The "pre" and "post" nature of increment and decrement operators can tend to be confusing for those who are not familiar with them; that's one way in which they can be tricky.

    0 讨论(0)
  • 2020-11-22 06:43

    In my view, "Explicit is always better than implicit." Because at some point, you may got confused with this increments statement y+ = x++ + ++y. A good programmer always makes his or her code more readable.

    0 讨论(0)
  • 2020-11-22 06:44

    Is Fortran a C-like language? It has neither ++ nor --. Here is how you write a loop:

         integer i, n, sum
    
          sum = 0
          do 10 i = 1, n
             sum = sum + i
             write(*,*) 'i =', i
             write(*,*) 'sum =', sum
      10  continue
    

    The index element i is incremented by the language rules each time through the loop. If you want to increment by something other than 1, count backwards by two for instance, the syntax is ...

          integer i
    
          do 20 i = 10, 1, -2
             write(*,*) 'i =', i
      20  continue
    

    Is Python C-like? It uses range and list comprehensions and other syntaxes to bypass the need for incrementing an index:

    print range(10,1,-2) # prints [10,8.6.4.2]
    [x*x for x in range(1,10)] # returns [1,4,9,16 ... ]
    

    So based on this rudimentary exploration of exactly two alternatives, language designers may avoid ++ and -- by anticipating use cases and providing an alternate syntax.

    Are Fortran and Python notably less of a bug magnet than procedural languages which have ++ and --? I have no evidence.

    I claim that Fortran and Python are C-like because I have never met someone fluent in C who could not with 90% accuracy guess correctly the intent of non-obfuscated Fortran or Python.

    0 讨论(0)
  • 2020-11-22 06:47

    There is a history in C of doing things like:

    while (*a++ = *b++);
    

    to copy a string, perhaps this is the source of the excessive trickery he is referring to.

    And there's always the question of what

    ++i = i++;
    

    or

    i = i++ + ++i;
    

    actually do. It's defined in some languages, and in other's there's no guarantee what will happen.

    Those examples aside, I don't think there's anything more idiomatic than a for loop that uses ++ to increment. In some cases you could get away with a foreach loop, or a while loop that checked a different condtion. But contorting your code to try and avoid using incrementing is ridiculous.

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