He estado reading this article about closures en la que dicen:¿Qué tiene de especial los cierres?
- "todas las cañerías es automática"
- el compilador "crea una clase contenedora" y "extiende la vida de las variables"
- "se pueden usar las variables locales sin preocupación"
- el compilador .NET se encarga de la instalación de cañerías para ti, etc.
Así que hice un ejemplo basado en su código y para mí, parece como aunque los cierres simplemente actúan de forma similar a los métodos de nombres regulares que también "se ocupan de las variables locales sin preocupaciones" y en las que "todas las tuberías son automáticas".
¿O qué problema resolvió este "ajuste de variables locales" que hace que los cierres sean tan especiales/interesantes/útiles?
using System;
namespace TestingLambda2872
{
class Program
{
static void Main(string[] args)
{
Func<int, int> AddToIt = AddToItClosure();
Console.WriteLine("the result is {0}", AddToIt(3)); //returns 30
Console.ReadLine();
}
public static Func<int, int> AddToItClosure()
{
int a = 27;
Func<int, int> func = s => s + a;
return func;
}
}
}
respuesta
Así que la respuesta a esta pregunta es leer Jon Skeet's article on closures que Marc señaló. Este artículo no solo muestra la evolución que lleva a las expresiones lambda en C#, sino que también muestra cómo se tratan los cierres en Java, una lectura excelente para este tema.
Otros idiomas (como Javascript) admiten cierres. ¿Estás preguntando sobre el concepto o la implementación específica de C#? – strager
Creo que ese ejemplo es demasiado simple para comprender el poder de los cierres. –
@strager: me refiero al concepto en general, estoy tratando de entender los delegados, cierres, mapas, lambdas, "expresiones lambda", "árboles lambda", funciones anónimas, currying, etc. y, en general, el nuevo paradigmas de programación funcional que parecen extenderse más allá de cualquier lengua, tienen sus raíces en las matemáticas, etc. (Puse C# en el título porque Stackoverflow ahora te dice que tu título "no es lo suficientemente bueno, agrega palabras únicas" ...) –