Un bloc est en quelque sorte une fonction indifférente. Je n'ai jamais programmé Java, mais voici quelques exemples de code pour d'autres langues pour vous montrer que les blocs sont similaires aux fonctions anonymes.
Ruby:
def add_5
puts yield + 5
end
add_5 { 20 }
# => 25
Javascript:
var add_5 = function(callback){
return callback.call() + 5;
}
add_5(function(){ return 20 });
// returns 25
Lua:
local function add_5(callback)
print(callback() + 5);
end
add_5(function()
return 20;
end)
-- returns 25
En d'autres termes, si Java prend en charge les fonctions anonymes comme ça, vous vous avez un bloc! Comme ce sont des fonctions, ils peuvent prendre des arguments, tout comme les blocs. Voici un autre exemple Lua:
local function add_something(callback)
callback(5/2);
end
add_something(function(a)
print(a + 5);
end)
-- 7.5
Incorrect. Groovy supporte les paramètres nommés à bloquer. Voir: http://groovy.codehaus.org/JN2515-Closures#JN2515-Closures-ClosureParameters – jiggy
Bien sûr, Groovy prend en charge les paramètres nommés pour les blocs. :-) Mon commentaire est que dans Groovy, si votre bloc prend un paramètre, le nommer est optionnel --- alors que dans Ruby c'est obligatoire. –
Désolé, j'ai mal lu :) – jiggy