A throw
est, en effet, une déclaration et non une expression, et doit donc être placée entre accolades. Selon la norme cet article À l'époque, le groupe d'experts Java a mené une enquête informelle sur la syntaxe des lambdas, et quatre options ont été proposées :
-
Homme de paille :
#(arglist)(expr) and #(arglist){statements}
-
BGGA :
{ args -> statements }
(similaire à Scala et Groovy)
-
SotL :
#{ args -> statements}
-
Redmond :
(args) -> { statements }
Finalement, le choix s'est porté sur une syntaxe similaire à celle de C# selon ce fil qui, d'après ce que j'ai pu voir, se rapproche le plus de la dernière option ci-dessus. En C#, il existe une distinction entre expression lambdas y déclaration lambdas :
Expression lambda (C#) :
(input parameters) => expression
Déclaration lambda (C#) :
(input parameters) => {statement;}
La syntaxe est expliquée dans cette page de documentation MSDN .
Les raisons du choix de cette syntaxe par rapport aux autres options sont mentionnées dans le fil de discussion précédent :
La décision de choisir cette syntaxe était double :
-
La syntaxe obtient un score "assez bon" pour la plupart des su a des cas où elle semble mauvaise, comme toutes les autres). En particulier, elle en particulier, elle se débrouille bien avec les "petits" lambdas qui sont utilisés comme (un cas courant), ainsi qu'avec les grands lambdas de type (plusieurs déclarations).
-
Malgré des recherches approfondies, il n'y a pas eu de vainqueur parmi les (chaque forme présentait certains aspects positifs et d'autres vraiment pas [ ] les autres). Nous avons donc estimé qu'il valait mieux choisir quelque chose qui avait déjà été utilisé dans le passé. déjà fait ses preuves dans les deux langages qui se rapprochent le plus de Java -- C# et Scala -- plutôt que d'inventer quelque chose de nouveau.