Scott Bennett
10/31/2022, 4:01 PM<cfscript>
myVar1 = true;
myVar2 = 1;
myVar3 = 0;
writeoutput(myVar1 and myVar2);
writeoutput(myVar1 and myVar3);
</cfscript>
Mark Takata (Adobe)
10/31/2022, 4:31 PMScott Bennett
10/31/2022, 4:36 PMScott Bennett
10/31/2022, 4:36 PMScott Bennett
10/31/2022, 4:45 PM<cfscript>
writeoutput(true eq 1);
</cfscript>
Mark Takata (Adobe)
10/31/2022, 4:46 PMMark Takata (Adobe)
10/31/2022, 4:47 PMScott Bennett
10/31/2022, 4:48 PMScott Bennett
10/31/2022, 4:48 PMScott Bennett
10/31/2022, 4:49 PMScott Bennett
10/31/2022, 4:49 PMScott Bennett
10/31/2022, 4:54 PM<cfscript>
myVar1 = false;
myVar2 = 1;
myVar3 = 0;
writeoutput(myVar1 or myVar2);
writeoutput(myVar1 and myVar3);
</cfscript>
ACF = 1false
Lucee = truefalseScott Bennett
10/31/2022, 4:56 PMScott Bennett
10/31/2022, 5:01 PMScott Bennett
10/31/2022, 5:02 PMScott Bennett
10/31/2022, 5:02 PMScott Bennett
10/31/2022, 5:08 PMScott Bennett
10/31/2022, 5:10 PMMark Takata (Adobe)
10/31/2022, 5:11 PMScott Bennett
10/31/2022, 5:11 PMScott Bennett
10/31/2022, 5:12 PMMark Takata (Adobe)
10/31/2022, 5:13 PMScott Bennett
10/31/2022, 5:13 PMScott Bennett
10/31/2022, 5:14 PMScott Bennett
10/31/2022, 5:14 PMMark Takata (Adobe)
10/31/2022, 5:14 PMMark Takata (Adobe)
10/31/2022, 5:15 PMScott Bennett
10/31/2022, 5:15 PMScott Bennett
10/31/2022, 5:18 PMScott Bennett
10/31/2022, 5:19 PMScott Bennett
10/31/2022, 5:19 PMScott Bennett
10/31/2022, 5:19 PMScott Bennett
10/31/2022, 5:22 PMseancorfield
and
and or
aren't technically Boolean operators. Several other languages have this behavior where X and Y
has the value X
is it is "false" in some sense (which includes 0
in CFML) or it will have the value Y
if X
is "true" (which includes 1
in CFML).seancorfield
X or Y
will have the value X
if it is "true", else it will have the value Y
.seancorfield
seancorfield
&&
and ||
instead of and
and or
?Scott Bennett
10/31/2022, 5:45 PMAdam Cameron
Scott Bennett
10/31/2022, 5:46 PMAdam Cameron
Scott Bennett
10/31/2022, 5:46 PMseancorfield
Adam Cameron
Scott Bennett
10/31/2022, 5:47 PMAdam Cameron
More generally, the operator returns the value of the first falsy operand encountered when evaluating from left to right, or the value of the last operand if they are all truthy.
seancorfield
(~)-(!2063)-> node
> true && (5 * 2)
10
> false || (5 * 2)
10
>
Scott Bennett
10/31/2022, 5:48 PMAdam Cameron
adam@DESKTOP-QV1A45U:~$ irb
irb(main):001:0> 5 and 7
=> 7
irb(main):002:0> 5 or 7
=> 5
irb(main):003:0>
Adam Cameron
groovy:000> 5 && 7
===> true
groovy:000> 5 || 7
===> true
groovy:000>
seancorfield
Adam Cameron
php > echo 5 && 7;
1
php > echo 5 || 7;
1
seancorfield
(~/clojure)-(!2065)-> clj
Clojure 1.11.1
user=> (and true (* 5 2))
10
user=> (or false (* 5 2))
10
user=>
Adam Cameron
seancorfield
Mark Takata (Adobe)
10/31/2022, 5:54 PMMark Takata (Adobe)
10/31/2022, 5:54 PMAdam Cameron
user=> (and 5 7)
7
user=> (or 5 7)
5
Adam Cameron
Scott Bennett
10/31/2022, 5:55 PMScott Bennett
10/31/2022, 5:55 PMScott Bennett
10/31/2022, 5:55 PMScott Bennett
10/31/2022, 5:56 PMAdam Cameron
Scott Bennett
10/31/2022, 5:57 PMMark Takata (Adobe)
10/31/2022, 5:58 PMAdam Cameron
Mark Takata (Adobe)
10/31/2022, 5:58 PMAdam Cameron