Redefining truthy and falsey values

Description

Consider adopting some behaviors from languages such as JavaScript or Groovy which allow for more clever conditional statements to be constructed. Consider this ticket a discussion on whether this is even possible and what implications it would have. I assume this might also require an on/off flag such as the null support feature.

This table outlines a suggestion of how the following values would behave when cast to booleans:

Value

Truthiness

null

false

Number

false if 0, otherwise true

String - Option 1

false if "0", or "false", or "no"; otherwise true if non-empty
"" throws exception

String - Option 2

false if "", or "0", or "false", or "no"; otherwise true if non-empty

Array

false if empty, otherwise true

Struct

false if empty, otherwise true

Object

true or based on CFC's toBoolean() method

This would allow for the full ternary version of the Elvis operator (Assuming full null support):

It would also simplify checking for the contents of structs and arrays:

I think these changes might be somewhat straightforward and mostly affect the Caster class, but most importantly:

  1. Do we want this in CFML?

  2. Would this have serious implications in backwards compatibility?

Other things to consider that are similar to Groovy would be Java Map, List and Iterator classes. True if not empty, or hasNext() is true.

References:

Assignee

Michael Offner

Reporter

Brad Wood

Labels

None

Priority

Major
Configure