• Type: Enhancement
    • Status: Added to TAG agenda
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Labels:


      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):

      foo = null;
      bar = foo ? foo : "default";

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

      myArray = [1,2.3];
      if( myArray ) writeOut("Array has stuff");
      myStruct = {};
      if( !myStruct ) writeOut("Struct is empty");

      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.





            • Assignee:
              michaeloffner Michael Offner
              bdw429s Brad Wood
            • Votes:
              4 Vote for this issue
              10 Start watching this issue


              • Created: