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

Function return with and without value does not give any warning

Expand Messages
  • Woomla
    The code snippet below doesn t give any errors or warnings. But return with and without a value is used. Shouldn t that at least issue a warning? use strict ;
    Message 1 of 7 , Mar 5, 2010
    View Source
    • 0 Attachment
      The code snippet below doesn't give any errors or warnings. But return with and without a value is used. Shouldn't that at least issue a warning?


      "use strict";

      function test(a, b)
      {
      if (a)
      {
      return true;
      }
      if (b)
      {
      return;
      }
      }
    • Mark Volkmann
      It could be a function that doesn t return anything and return is being used just to exit the function early. In that case using return without a value makes
      Message 2 of 7 , Mar 5, 2010
      View Source
      • 0 Attachment
        It could be a function that doesn't return anything and return is being used
        just to exit the function early. In that case using return without a value
        makes sense.

        On Fri, Mar 5, 2010 at 8:24 AM, Woomla <woomla@...> wrote:

        >
        >
        > The code snippet below doesn't give any errors or warnings. But return with
        > and without a value is used. Shouldn't that at least issue a warning?
        >
        > "use strict";
        >
        > function test(a, b)
        > {
        > if (a)
        > {
        > return true;
        > }
        > if (b)
        > {
        > return;
        > }
        > }
        >

        --
        R. Mark Volkmann
        Object Computing, Inc.


        [Non-text portions of this message have been removed]
      • Woomla
        If a function does not return anything than it is ok to use return without a value, although I don t consider this as best practise . In my example, however,
        Message 3 of 7 , Mar 7, 2010
        View Source
        • 0 Attachment
          If a function does not return anything than it is ok to use return without a value, although I don't consider this as 'best practise'.

          In my example, however, I have both return with value and return without value. In a more strict language as C/C++ this is forbidden. Unfortunately it is allowed in Javascript, which, in my opinion, could lead to bugs that are hard to track.

          If you check the results of a function that did not return a value, the result is undefined or 'undefined', or another value assigned to undefined. Causing enough confusement, and hard to track down why twenty calls later some value is undefined.

          I think you should program your functions to always return a value, or never. And don't mix this. That way, you're always forced to think about and define what you're functions should do an return. Even better, write a unittest where you define the input and outcome of your function.

          Anyway, a little jslint warning, which I personally would threat as an error, would be very helpfull here.


          --- In jslint_com@yahoogroups.com, Mark Volkmann <r.mark.volkmann@...> wrote:
          >
          > It could be a function that doesn't return anything and return is being used
          > just to exit the function early. In that case using return without a value
          > makes sense.
          >
          > On Fri, Mar 5, 2010 at 8:24 AM, Woomla <woomla@...> wrote:
          >
          > >
          > >
          > > The code snippet below doesn't give any errors or warnings. But return with
          > > and without a value is used. Shouldn't that at least issue a warning?
          > >
          > > "use strict";
          > >
          > > function test(a, b)
          > > {
          > > if (a)
          > > {
          > > return true;
          > > }
          > > if (b)
          > > {
          > > return;
          > > }
          > > }
          > >
          >
          > --
          > R. Mark Volkmann
          > Object Computing, Inc.
          >
          >
          > [Non-text portions of this message have been removed]
          >
        • Stefan Weiss
          ... All JavaScript functions return a value. If you don t specify a return value, they implicitly return undefined, which means that your example could be
          Message 4 of 7 , Mar 7, 2010
          View Source
          • 0 Attachment
            On 07/03/10 12:53, Woomla wrote:
            > If a function does not return anything than it is ok to use return
            > without a value, although I don't consider this as 'best practise'.
            >
            > In my example, however, I have both return with value and return
            > without value. In a more strict language as C/C++ this is forbidden.
            > Unfortunately it is allowed in Javascript, which, in my opinion, could
            > lead to bugs that are hard to track.

            All JavaScript functions return a value. If you don't specify a return
            value, they implicitly return undefined, which means that your example
            could be shortened to

            function test (a) {
            if (a) {
            return true;
            }
            }

            You can't really compare this to C or Java. Those languages are
            statically typed, and you have to declare a specific return type for
            each function/method (including the void type). If the actual return
            value doesn't match this type, it must be an error.

            > If you check the results of a function that did not return a value,
            > the result is undefined or 'undefined', or another value assigned to
            > undefined.

            No, the implicit return value is always the undefined value, as in

            typeof test() == "undefined"

            - never "undefined" or any other value.

            > Causing enough confusement, and hard to track down why twenty
            > calls later some value is undefined.
            >
            > I think you should program your functions to always return a value,
            > or never. And don't mix this. That way, you're always forced to think about
            > and define what you're functions should do an return. Even better, write
            > a unittest where you define the input and outcome of your function.
            >
            > Anyway, a little jslint warning, which I personally would threat as
            > an error, would be very helpfull here.

            I don't agree. This would be similar to the "strict warnings" setting in
            Firefox, which does as you suggest, and is so annoying that everybody I
            know leaves them turned off. We did have a phase where we tried to
            conform to the "always (or never) explicitly return a value" idea, but
            adding "return undefined" at the end of functions quickly became a
            nuisance. It didn't add any kind of safety, in my experience, because
            the behavior was exactly the same as before.

            If you feel you really need this feature, you could just run your code
            in Firefox, and turn the strict JavaScript warnings on.


            --
            stefan
          • Satyam
            DOM Event listeners can return false to prevent them from doing their default action so it is not just a JavaScript issue but one promoted by the environment
            Message 5 of 7 , Mar 7, 2010
            View Source
            • 0 Attachment
              DOM Event listeners can return false to prevent them from doing their
              default action so it is not just a JavaScript issue but one promoted by
              the environment JavaScript is most likely to be found. Of course you
              could return something in both cases, but the issue is that most
              documentation, tutorials and so on promote this practice, return false
              or don't return anything, and I don't think it would be practical to
              swim against the current. And I'm certainly not saying that it is a
              good practice, but it is there, documented and promoted, like it or not.

              Satyam

              El 07/03/2010 12:53, Woomla escribiĆ³:
              >
              > If a function does not return anything than it is ok to use return
              > without a value, although I don't consider this as 'best practise'.
              >
              > In my example, however, I have both return with value and return
              > without value. In a more strict language as C/C++ this is forbidden.
              > Unfortunately it is allowed in Javascript, which, in my opinion, could
              > lead to bugs that are hard to track.
              >
              > If you check the results of a function that did not return a value,
              > the result is undefined or 'undefined', or another value assigned to
              > undefined. Causing enough confusement, and hard to track down why
              > twenty calls later some value is undefined.
              >
              > I think you should program your functions to always return a value, or
              > never. And don't mix this. That way, you're always forced to think
              > about and define what you're functions should do an return. Even
              > better, write a unittest where you define the input and outcome of
              > your function.
              >
              > Anyway, a little jslint warning, which I personally would threat as an
              > error, would be very helpfull here.
              >
              > --- In jslint_com@yahoogroups.com
              > <mailto:jslint_com%40yahoogroups.com>, Mark Volkmann
              > <r.mark.volkmann@...> wrote:
              > >
              > > It could be a function that doesn't return anything and return is
              > being used
              > > just to exit the function early. In that case using return without a
              > value
              > > makes sense.
              > >
              > > On Fri, Mar 5, 2010 at 8:24 AM, Woomla <woomla@...> wrote:
              > >
              > > >
              > > >
              > > > The code snippet below doesn't give any errors or warnings. But
              > return with
              > > > and without a value is used. Shouldn't that at least issue a warning?
              > > >
              > > > "use strict";
              > > >
              > > > function test(a, b)
              > > > {
              > > > if (a)
              > > > {
              > > > return true;
              > > > }
              > > > if (b)
              > > > {
              > > > return;
              > > > }
              > > > }
              > > >
              > >
              > > --
              > > R. Mark Volkmann
              > > Object Computing, Inc.
              > >
              > >
              > > [Non-text portions of this message have been removed]
              > >
              >
              >
              >
              >
              >
              > No virus found in this incoming message.
              > Checked by AVG - www.avg.com
              > Version: 9.0.733 / Virus Database: 271.1.1/2727 - Release Date: 03/06/10 20:34:00
              >
              >


              [Non-text portions of this message have been removed]
            • Woomla
              ... Unfortunately I must agree. And I surely don t want to swim againts the current. If you can circumvent the jslint warning by adding return undefined, then
              Message 6 of 7 , Mar 8, 2010
              View Source
              • 0 Attachment
                --- In jslint_com@yahoogroups.com, Stefan Weiss <weiss@...> wrote:
                >
                > > I think you should program your functions to always return a value,
                > > or never. And don't mix this. That way, you're always forced to think about
                > > and define what you're functions should do an return. Even better, write
                > > a unittest where you define the input and outcome of your function.
                > >
                > > Anyway, a little jslint warning, which I personally would threat as
                > > an error, would be very helpfull here.
                >
                > I don't agree. This would be similar to the "strict warnings" setting in
                > Firefox, which does as you suggest, and is so annoying that everybody I
                > know leaves them turned off. We did have a phase where we tried to
                > conform to the "always (or never) explicitly return a value" idea, but
                > adding "return undefined" at the end of functions quickly became a
                > nuisance. It didn't add any kind of safety, in my experience, because
                > the behavior was exactly the same as before.

                Unfortunately I must agree. And I surely don't want to swim againts the current. If you can circumvent the jslint warning by adding return undefined, then probably it's not a good idea to have the warning in the first place. But if there was a warning, it would still mean that the programmer has to pay attention to his or her function and it can not slip through unforseen. All my functions either have or don't have return values, and a mix for me will indicate an error.

                If only the rest of the world would also program that strict :-) But then it is probably better to make it a typed language. (Which in fact phplint is doing!)


                > If you feel you really need this feature, you could just run your code
                > in Firefox, and turn the strict JavaScript warnings on.

                Of course I can do this. And probably I can do this to get all kind of bad programming and bugs visible. But it is so much easier to use jslint. And also all warnings from third party scripts appear as well. And there will be many, so it will be hard to spot my single
                warning.
              • Douglas Crockford
                ... C s interest in producing an error here is due to its type system. It want to generate different code for void functions than for other types of functions.
                Message 7 of 7 , Mar 8, 2010
                View Source
                • 0 Attachment
                  --- In jslint_com@yahoogroups.com, "Woomla" <woomla@...> wrote:
                  >
                  > The code snippet below doesn't give any errors or warnings. But return with and without a value is used. Shouldn't that at least issue a warning?
                  >
                  >
                  > "use strict";
                  >
                  > function test(a, b)
                  > {
                  > if (a)
                  > {
                  > return true;
                  > }
                  > if (b)
                  > {
                  > return;
                  > }
                  > }
                  >

                  C's interest in producing an error here is due to its type system. It want to generate different code for void functions than for other types of functions. JavaScript does not have this difficulty. There are no void functions. Every function returns a value, even if it is only the undefined value.

                  I am reluctant to add more complaints to JSLint unless there is some evidence that doing so will make programs better. I don't see the benefit to the warning you are demanding. Can you offer some evidence?
                Your message has been successfully submitted and would be delivered to recipients shortly.