tracker issue : CF-4198396

select a category, or use search below
(searches all categories and all time range)
Title:

Support "arrow functions" syntax for closures

| View in Tracker

Status/Resolution/Reason: Closed/Fixed/Fixed

Reporter/Name(from Bugbase): Bradley Wood / Bradley Wood ()

Created: 03/10/2017

Components: Language, Closures

Versions: 2016,11.0,10.0

Failure Type: Enhancement Request

Found In Build/Fixed In Build: / latest build

Priority/Frequency: Normal /

Locale/System: /

Vote Count: 15

Please support the popular "arrow function" syntax for declaring closures.  Please copy the precedent already set by Lucee Server.  This is documented here:
http://docs.lucee.org/guides/lucee-5/lambda.html

It basically works like this:

Simple lambda with no arguments


{code:java}
// Using a traditional function
makeSix = function() { return 5 + 1; }

// Using a lambda expression
makeSix = () => 5 + 1;

Simple lambda with arguments:

// Takes two numeric values and adds them
add = (numeric x, numeric y) => x + y;

Another example with an argument:

// Takes a numeric value and returns a string
isOdd = (numeric n) => {
  if ( n % 2 == 0 ) {
    return 'even';
  } else {
    return 'odd';
  }
};
{code}

Attachments:

Comments:

Please note, arrow functions are mentioned in this ticket, but it's a more general ticket with several enhancements so I entered this specific ticket for it. https://tracker.adobe.com/#/view/CF-4157939
Comment by Bradley Wood
1112 | March 10, 2017 07:29:58 PM GMT
This would be amazing and modern. I remain skeptical however that Adobe would ever do such a thing. Voting because I am persistently hopeful Adobe will become cool again.
Comment by Jim Pickering
1113 | March 10, 2017 08:44:16 PM GMT
+1 - But I'd like to see struct/array literal fixed properly first. And the only way to fix -that- is a complete rewrite of it.
Vote by Aaron Neff
1116 | March 10, 2017 09:38:27 PM GMT
Regarding my vote comment that mentioned struct/array literal needing fixed, Adobe said "fixing this would need almost a re-write for implicit struct/array implementation" in ticket https://tracker.adobe.com/#/view/CF-3740276. Thanks!, -Aaron
Comment by Aaron Neff
1114 | March 10, 2017 09:49:20 PM GMT
Is this something done for 2018?
Comment by Luis Majano
1115 | November 27, 2017 07:14:20 PM GMT
This is marked as "fixed" but the examples given in the ticket throw syntax errors in 2018 beta 3. Is this part of Aether?
Comment by Bradley Wood
29275 | July 11, 2018 04:38:20 AM GMT
Hello? The first example in this post doesn't work on the final release of 2018 yet this ticket is marked as fixed. What is up? https://trycf.com/gist/95db664da7de0719531dc7423508d0a3/acf2018?theme=monokai
Comment by Bradley Wood
29381 | July 24, 2018 05:16:11 AM GMT
Brad : This has been fixed recently on 28th June and is in testing phase as of now. This is not a part of Aether.
Comment by Ashudeep Sharma
29382 | July 24, 2018 05:59:15 AM GMT
Client Communication 101, Ashudeep: When the status of a ticket changes, always (*always*) add a comment explaining the change: what was done, why, what the client can expect next. This applies to you, and also applies to everyone else who touches issues in the bug tracker. Dealing with these CF issues should not be a big mystery for your clients. Keep them abreast of the situation! So when's this fix going to be released? It's not really "fixed" until it's out the door.
Comment by Adam Cameron
29387 | July 24, 2018 08:18:38 AM GMT
Hi Adam , We support the following syntax as of now , {code:java} <cfscript> isOdd = (numeric n) => { if ( n % 2 == 0 ) { return 'even'; } else { return 'odd'; } }; writeOutput(isOdd(1)); writeOutput(isOdd(10)); </cfscript> {code}   {code:java} <cfscript> add = (numeric x, numeric y,numeric z) => 5+6-23; writeOutput(add(3,4,2)); </cfscript> {code}   {code:java} <cfscript> add = (numeric x, numeric y,numeric z) => x * y -z; writeOutput(add(3,4,2)); </cfscript> {code} We are still in the testing phase , and looking for other lambda syntaxes that we can support. This fix would be available in the next update of ColdFusion 2018. Thanks, Suchika
Comment by Suchika Singh
29388 | July 24, 2018 08:36:23 AM GMT
Thanks Suchika: that's a great answer.
Comment by Adam Cameron
29389 | July 24, 2018 08:52:55 AM GMT
Thank you for the update. That information was definitely not clear from the ticket. I look forward to testing the changes. Also, I know you guys looked at Lucee a bit in the 2018 cycle to compare features which was great. Keep an eye on some of the Lucee bugs for arrow functions which document a few things still not quite right over there (lest you copy what they did even if it was wrong!) That way we can try and keep both CF engines on the same page. Ex: https://luceeserver.atlassian.net/browse/LDEV-1621 https://luceeserver.atlassian.net/browse/LDEV-1484 Thx again, I'm really excited to finally be able to use this syntax in my BDD tests across engines!
Comment by Bradley Wood
29394 | July 24, 2018 04:59:10 PM GMT
As per my discussion with Awdhesh and based on Suchika's comment at 24/Jul/18 14:06, the fix will be available in the upcoming update, i.e. CF2018 U2. If we hit any blocker, then, please leave an external note.  
Comment by Anit Kumar Panda
29701 | September 14, 2018 11:10:52 AM GMT