Loading ...
Sorry, an error occurred while loading the content.
 

Re: [jslint] Re: Wrapping assignment in extra parentheses no longer working.

Expand Messages
  • luke.a.page
    for (a = a.next; a;) { //... a = a.next; } but generally where there is code repetition (a = a.next) I tend to find a bigger refactor is needed - why isn t the
    Message 1 of 6 , Jan 31, 2011
      for (a = a.next; a;) {
      //...
      a = a.next;
      }

      but generally where there is code repetition (a = a.next) I tend to find a
      bigger refactor is needed - why isn't the first a in the while loop? You are
      skipping the first element, so make the reason for that obvious by the
      structure of the code, instead of trying to disguise it by only executing
      the statement once. If you are skipping the head, can you make it more
      obvious, e.g.

      var head = a; tail = a.next;

      //process head

      while(tail) {
      // process tail
      tail = tail.next;
      }

      and then, rather than code repetition you have something that looks like it
      is - a statement to get the tail and a while loop to process everything in
      the tail.

      On 31 January 2011 02:53, thomasrutter <trr@...> wrote:

      >
      >
      > Unfortunately I'm in the situation of having a large amount of code using
      > the old jslint custom - a common pattern being
      >
      > while ((a = a.next)) {
      >
      > This code can be rewritten eventually, though in the meantime, there are a
      > lot of jslint errors coming up for code that I'm confident is working and
      > well-tested for now.
      >
      > A jslint flag allowing it to use the old behaviour would be helpful.
      > Otherwise, I guess there is
      > - trying to use an earlier jslint
      > - ignoring the jslint errors for a while
      >
      > As for rewriting this code, any equivalent that avoids repeating oneself?
      > e.g.
      >
      > a = a.next;
      > while (a) {
      > //...
      > a = a.next;
      > }
      >
      > I'm wondering if I can reach out to other people on this list for
      > suggestions.
      >
      > Thanks
      >
      >
      >


      [Non-text portions of this message have been removed]
    • Morgaut Alexandre Louis Marc
      ... Which can also be written like this: for (a = a.next; a; a = a.next) { //... } This notation show even more explicitly the iteration statement The second
      Message 2 of 6 , Jan 31, 2011
        > for (a = a.next; a;) {
        > //...
        > a = a.next;
        > }

        Which can also be written like this:

        for (a = a.next; a; a = a.next) {
        //...
        }

        This notation show even more explicitly the iteration statement

        The second example proposed by luke with head and tail is important,
        it gives the code a better semantic

        for the same objective, we can also write

        var
        current;

        for (current = a; current !== undefined; current = current.next) {
        // ...
        }


        PS:

        It could have been even better if JavaScript supported
        "current .= next;"
        as
        "current = current . next;"
        and then
        "current = current.next;"

        But it may be confusing for people coming from PHP ;-)
      • Chris
        ... JSLint does not complain about the following code, which features assignment inside a conditional: /*global document */ var p; if ((p =
        Message 3 of 6 , Feb 25, 2011
          --- In jslint_com@yahoogroups.com, "Douglas Crockford" <douglas@...> wrote:
          >
          >
          > I found that there were cases where people would take the erroneous code and wrap parens around it to avoid the warning.
          >
          > The assumptions behind JSLint call for subsetting the language so that the correct constructs are more easily distinguished from errors.
          >

          JSLint does not complain about the following code, which features assignment inside a conditional:

          /*global document */

          var p;

          if ((p = document.body.lastChild).nodeName.toLowerCase() !== 'p') {
          p = document.body.appendChild(document.createElement('p'));
          }


          Should JSLint issue a warning for this?

          Thanks!
          - Chris
        Your message has been successfully submitted and would be delivered to recipients shortly.