Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #39986

Re: Understanding &&

From Ben Bacarisse <ben.usenet@bsb.me.uk>
Newsgroups comp.lang.javascript
Subject Re: Understanding &&
Date 2021-04-19 21:28 +0100
Organization A noiseless patient Spider
Message-ID <87r1j6yq6u.fsf@bsb.me.uk> (permalink)
References (3 earlier) <slrns7jb5v.4j8.jon+usenet@raven.unequivocal.eu> <87mttydm95.fsf@bsb.me.uk> <ie16fpFavc9U1@mid.individual.net> <87lf9ga4gz.fsf@bsb.me.uk> <ie58ilF4ao6U1@mid.individual.net>

Show all headers | View raw


Arno Welzel <usenet@arnowelzel.de> writes:

> Ben Bacarisse:
>
>> Arno Welzel <usenet@arnowelzel.de> writes:
> [...]
>>> x = a && b;
>>>
>>> Nobody would expect that this *expression* will cause parts of the code
>>> to get executed or not
>> 
>> Hmm...  Everyone should expect that since that's what && means.  Do you
>> mean && (as defined) should simply not exist is programming languages?
>
> No. It is just what I said - "a && b" is an expression which will not
> change anything in a or b because there is no additional code getting
> executed which might change a or b depending on the value of a.

I think I see what you mean, but I replied based on what you wrote.
Those extra bits about code that might change a or b weren't there.  The
"hmm..." was supposed to suggest that there is something confusing or
unlikely about what you said.

> [...]
>>> The ??= operator was *intentionally* designed to work this way.
>> 
>> That's a new one to me.  I thought the 11th edition was the latest, and
>> it's not in there.
>
> I maybe got ??= from another language, I can't remember where I looked
> this up when I mentioned it, sorry. Just forget it.

Turned out to be helpful as I learned that's it's "almost" in the
standard along with &&= and ||=.

>> That aside, I think && and || were intentionally designed to work as
>> they do, so intentional design can't justification enough in your mind.
>
> Ok, I need to clarify this:
>
> For an expression like "a && b" or "a || b" there is no obvious way how
> it will get evaluated. It's just a convetion that the evaluation will
> stop at the point where the remaining part does not *need* to be evaluated.
>
> a && b will evualate "a" first and stop, if a is false
> a || b will evualate "a" first and stop, if a is true
>
> But this is something one needs to know besides the fact that "&&" means
> "logical and" and "||" means "logical or". Therefore I call i at least
> bad style to rely on this fact and create code like

OK, I see what you mean.  I disagree, but I'm not sure that it matters
enough to say much about it.  Bottom line: programmer should know the
language, and the language does guarantee what you think of as a
convention.

> return
>   statement1 &&
>   statement2 &&
>   statement3 &&
>   statement4;

(Odd terminology.  These have to expressions, not statements.)

> instead of
>
> if (!statement1) {
>   return false;
> }
> if (!statement2) {
>   return false;
> }
> if (!statement3) {
>   return false;
> }
> return statement 4;
>
> Yes, the latter one needs more lines but is obvious what the code does
> even if you don't remember that "&&" is evaluated from left to right and
> that the the evaluation stops at the first statement which returns
> false.

Need three more lines:

  if (!statement1) {
    return false;
  }
  if (!statement2) {
    return false;
  }
  if (!statement3) {
    return false;
  }
  if (!statement4) {
    return false;
  }
  return true;

You could write return !!statement4; or return statement4 == true; but I
assume you'd rather keep the pattern going.

-- 
Ben.

Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Understanding && Andrew Poulos <ap_prog@hotmail.com> - 2021-04-16 14:30 +1000
  Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-16 11:00 +0100
  Re: Understanding && Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-04-16 11:17 +0000
    Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-16 16:09 +0100
      Re: Understanding && Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-04-16 15:26 +0000
        Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-16 21:09 +0100
          Re: Understanding && Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-04-16 21:06 +0000
            Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-17 02:01 +0100
              Re: Understanding && The Natural Philosopher <tnp@invalid.invalid> - 2021-04-17 08:33 +0100
              Re: Understanding && John G Harris <niam@jghnorth.org.uk.invalid> - 2021-04-17 12:06 +0100
                Re: Understanding && The Natural Philosopher <tnp@invalid.invalid> - 2021-04-17 14:13 +0100
                Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-17 15:50 +0100
              Re: Understanding && Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-04-17 15:21 +0000
                Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-17 23:46 +0100
                Re: Understanding && Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-04-17 23:46 +0000
                Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-18 23:59 +0100
                Re: Understanding && Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-04-19 13:56 +0000
                Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-19 23:08 +0100
                Re: Understanding && Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-04-19 22:52 +0000
                Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-20 01:23 +0100
                Re: Understanding && Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-04-20 01:08 +0000
              Re: Understanding && Arno Welzel <usenet@arnowelzel.de> - 2021-04-18 00:49 +0200
                Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-18 17:26 +0100
          Re: Understanding && Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-04-17 17:05 +0200
            Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-17 23:04 +0100
              Re: Understanding && Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-04-18 00:48 +0200
                Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-18 17:13 +0100
                Re: Understanding && Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2021-04-19 21:58 +0200
            Re: Understanding && John G Harris <niam@jghnorth.org.uk.invalid> - 2021-04-18 18:20 +0100
          Re: Understanding && Arno Welzel <usenet@arnowelzel.de> - 2021-04-18 00:40 +0200
            Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-18 00:14 +0100
              Re: Understanding && Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-04-18 00:01 +0000
                Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-18 17:44 +0100
                Re: Understanding && Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-04-18 17:51 +0000
              Re: Understanding && Arno Welzel <usenet@arnowelzel.de> - 2021-04-19 13:41 +0200
                Re: Understanding && John G Harris <niam@jghnorth.org.uk.invalid> - 2021-04-19 15:02 +0100
                Re: Understanding && The Natural Philosopher <tnp@invalid.invalid> - 2021-04-20 17:40 +0100
                Re: Understanding && John G Harris <niam@jghnorth.org.uk.invalid> - 2021-04-20 18:19 +0100
                Re: Understanding && The Natural Philosopher <tnp@invalid.invalid> - 2021-04-21 10:11 +0100
                Re: Understanding && John G Harris <niam@jghnorth.org.uk.invalid> - 2021-04-21 19:46 +0100
                Re: Understanding && The Natural Philosopher <tnp@invalid.invalid> - 2021-04-22 13:48 +0100
                Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-19 21:28 +0100
                Re: Understanding && Jon Ribbens <jon+usenet@unequivocal.eu> - 2021-04-19 21:56 +0000
                Re: Understanding && Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-04-19 23:13 +0100

csiph-web