66 votes

Existe-t-il une syntaxe lambda de type C# en JavaScript ?

Existe-t-il un framework ou un post-processeur pour JavaScript qui supporte la syntaxe lambda comme en C# ?

Les définitions de fonctions dans CoffeeScript semblent ressembler à des lambdas, mais je ne les ai pas étudiées en détail.

Quelqu'un peut-il me dire, Puis-je utiliser la syntaxe lambda en JavaScript ?

73voto

Matthew Mcveigh Points 3311

Les fonctions lambda ayant une syntaxe similaire sont incluses dans le programme ECMAscript 6 ils sont connus sous le nom de "fonctions fléchées". Un exemple :

["duck", "cat", "goat"].filter(el => el.length > 3); renvoie à ["duck", "goat"]

Il y a actuellement un support dans les versions récentes de Firefox y Chrome .

Pour utiliser cette syntaxe dans un JavaScript destiné à des navigateurs plus anciens, il existe des outils qui permettent de compiler l'ES 6 vers une version plus largement prise en charge. Babel o Traceur .

11voto

hans Points 374

Vous pouvez utiliser le script ( www.typescriptlang.org/) :

function (d, i) {
    return "translate(" + d.x + "," + d.y + ")";
}

deviendrait

(d, i) =>  "translate(" + d.x + "," + d.y + ")"  

et bien d'autres choses encore, comme taper : ... si cela vous intéresse.

5voto

Ruben-J Points 1860

J'ai commencé à créer une extension pour jQuery qui fait exactement la chose que vous demandez. JS-Lambda

Par exemple, en C# :

  coll.TakeWhile(x => x.index < 3);

On dirait :

 $(coll).TakeWhile("x => x.index < 3");

3voto

Exactement Matthew Mcveigh !

Je veux aussi contribuer, voir cet exemple

"use strict";
/* Lambda Helper to print  */
function PrintLineForElement(element, index, array){
  document.write("a[" + index + "] = " + JSON.stringify(element)+"<br>");
}
/* function to print array */
function Print(a){
   a.forEach(PrintLineForElement)
   document.write("<br>");
}
/* user model */
class User{
        constructor(_id,_name,_age,_job){
             this.id = _id;
       this.name = _name;
             this.age = _age;
       this.job = _job;
        }
} 
/* Provaider users */
class UserService{ 

        constructor(){ } 

        GetUsers(){
        //fake ajax response
                let data = [];  
        data.push(new User(1,"Juan",20,"AM"));
        data.push(new User(2,"Antonio",20,"AM"));
        data.push(new User(3,"Miguel Angel",30,"Developer"));
        data.push(new User(4,"Bea",26,"AM"));
        data.push(new User(5,"David",24,"Developer")); 
        data.push(new User(6,"Angel",24,"Developer")); 
        data.push(new User(7,"David",34,"TeamLead"));
        data.push(new User(8,"Robert",35,"TeamLead"));
        data.push(new User(9,"Carlos",35,"TeamLead"));   

        return data;
        }
}

const userService = new UserService();
const users =  userService.GetUsers();

//get user order by name
document.write("All users </br>");
Print(users);

//get user order by name
document.write("Order users by name ASC : users.sort((a,b)=>{return a.name > b.name })</br>");
Print(users.sort((a,b)=>{return a.name > b.name; }));
document.write("Order users by name DESC : users.sort((a,b)=>{return a.name < b.name })</br>");
Print(users.sort((a,b)=>{return a.name < b.name; }));

//get user filter by age 
document.write("Only users oldest or equal than 25 : users.filter( (w) => {return w.age >= 25;} )</br>");
Print(users.filter( (w) => {return w.age >= 25;} )); 
document.write("Only users smallest or equal than 25 : users.filter( (w) => {return w.age <= 25;} )</br>");
Print(users.filter( (w) => {return w.age <= 25;} )); 

//GroupBY 
/**
* custom group by with Array.prototype.keys
**/

Array.prototype.groupBy = function(f)
{
  let groups = [];
  this.forEach( function( o )
  {
    let group =  f(o) ;
    groups[group] = groups[group] || [];
    groups[group].push( o );  
  });

  return Object.keys(groups).map( function( group )
  {
    return groups[group]; 
  })
}

document.write("Group user by age </br>");
Print(users.groupBy( (w) => {return w.age } )); 

document.write("Group user by job </br>");
Print(users.groupBy( (w) => {return w.job } )); 

document.write("Group user by job</br>");
Print(users.groupBy( (g) => {return [g.job] } ));

document.write("Group user by job and age then order by name </br>");
Print(users.sort((a,b)=>{return a.job > b.job}).groupBy( (g) => {return [g.job+g.age] } ));

document.write("Group user by job and age then order by name and filter where age < 25 and job equal AM </br>");
Print(users.sort((a,b)=>{return a.job > b.job}).filter((w)=>{ return w.age<25 || w.job == "AM" }).groupBy( (g) => {return [g.job+g.age] } ));

https://jsfiddle.net/angelfragap/0b5epjw3/29/

3voto

Morteza Tourani Points 2673

Javascript possède de très belles fonctions anonymes qui vous permettent de créer des lambdas partout où vous avez besoin d'une fonction, mais la mise en œuvre s'accompagne de quelques mots et de répétitions de création de portée :

function(name){
     return "Hello, " + name;
}

Grâce à EcmaScript 2015, l'expression lambda est maintenant disponible pour javaScript avec une syntaxe plus simple, telle que Fonction de la flèche

(name) => "Hello, " + name

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X