significado school programacion fisica craneo aws anatomia lambda

school - ¿De qué es esta ''Lambda'' de la que todo el mundo sigue hablando?



lambda significado (14)

Funciones sin nombre

En pocas palabras, una lambda es una función sin nombre ni función anónima. Una pequeña porción de código ejecutable, que se puede pasar como si fuera una variable. En JavaScript:

function () {}; // very simple

Veamos ahora algunos usos de estas lambdas.

Resumen del código repetitivo

Lambdas se puede usar para abstraer el código repetitivo. Por ejemplo, bucles. Estamos acostumbrados a escribir for y while bucles todo el día. Pero este es un código que no se escribe. Podríamos extraer el código dentro del ciclo, la parte más importante del ciclo, y abstraer el resto:

for (var i=0; i<array.length; i++) { // do what something useful with array[i] }

mediante el forEach de cada forEach de los objetos de matriz, se convierte en:

array.forEach(function (element, index) { // do something useful with element // element is the equivalent of array[i] from above });

La abstracción anterior puede no ser tan útil, pero hay otras funciones de orden superior, como para forEach , que realizan tareas mucho más útiles. Por ejemplo, filter :

var numbers = [1, 2, 3, 4]; var even = []; // keep all even numbers from above array for (var i=0; i<numbers.length; i++) { if (numbers[i] % 2 === 0) { even.push(numbers[i]); } } alert(even); // Using the filter method even = [1, 2, 3, 4].filter(function (number) { return number % 2 === 0; }); alert(even);

Retraso en la ejecución

En algunos entornos, en los que el concepto de evento está disponible, podríamos usar lambdas para responder a eventos que pueden suceder en algún momento.

window.onload = function () { alert("Loaded"); }; window.setTimeout(function () { alert("Code executed after 2 seconds."); }, 2000);

Esto podría haberse hecho de otras formas, pero son bastante verbosas. Por ejemplo, en Java existe la interfaz Runnable .

Fábricas de funciones

Hasta este punto, solo usamos Lambdas por sus capacidades sintácticas de azúcar en su mayoría. Pero hay situaciones en las que lambdas puede ser mucho más útil. Por ejemplo, podemos tener funciones que devuelvan lambdas. Digamos que tenemos una función que queremos que sus valores de retorno sean almacenados en caché.

var users = []; var getUser = function (name) { if (! users[name]) { // expensive operations to get a user. Ajax for example users[name] = user_from_ajax; } return users[name]; };

Más adelante, podemos notar que tenemos una función similar:

var photos = []; var getPhoto = function (name) { if (! photo[name]) { // expensive operations to get a user. Ajax for example photos[name] = photo_from_ajax; } return photos[name]; };

Claramente hay un patrón ahí, así que vamos a abstraerlo. memoization .

/** * @param {Array} store Data structure in which we cache lambda''s return values * @param {Function} lambda * @return {Function} A function that caches the result of calling the lambda param */ var memoize = function (store, lambda) { // return a new lambda return function (name) { if (! store[name]) { // Execute the lambda and cache the result store[name] = lambda(name); } return store[name]; }; }; var getUsers = memoize([], function (name) { // expensive operations to get a user. Ajax for example }); var getPhotos = memoize([], function (name) { // expensive operations to get a photo. Ajax for example });

Como puede ver, al usar lambdas, pudimos abstraer la lógica de almacenamiento en memoria caché / memo. Si para el otro ejemplo hay algunas soluciones, creo que este problema en particular difícilmente se resuelve con otras técnicas. Logramos extraer un código repetitivo importante en un solo lugar. Sin mencionar que nos deshicimos de las variables globales de users y photos .

Al mirar tu perfil, veo que eres principalmente un usuario de Python. Para el patrón anterior, Python tiene el concepto de decoradores. Hay muchos ejemplos en la red para los decoradores de memorias . La única diferencia es que en Python lo más probable es que tenga una función anidada con nombre dentro de esa función de decorador. La razón es que Python solo admite lambdas de expresión única. Pero el concepto es el mismo

Como ejemplo del uso de Python lambda. El código anterior en el que filtramos números pares se puede representar en Python de esta manera:

filter(lambda x: x % 2 == 0, [1, 2, 3, 4])

De todos modos, las lambdas no son tan poderosas sin cierres. Closures es lo que hace que el concepto de lambdas sea tan poderoso. En mi ejemplo de memorización, he usado cierres para crear un cierre alrededor del parametro de la store . De esta forma, tengo acceso a ese parámetro incluso después de que la función memoize haya devuelto su resultado (una lambda).

¿De qué es esta ''Lambda'' de la que todo el mundo sigue hablando? Mucha gente parece encantarlo, pero todo lo que puedo deducir es que es solo una manera de meter muchas líneas de código en una sola expresión.

¿Alguien puede por favor iluminarme en su verdadero valor?


"Lambda" quizás solo muy pocos. Echa un vistazo al cálculo lambda . Es útil en la programación funcional.

Y la programación funcional es otro paradigma de programación (como procedural u orientado a objetos).


"Una expresión lambda es una función anónima que puede contener expresiones y declaraciones, y se puede usar para crear delegados o tipos de árboles de expresiones.

Todas las expresiones lambda utilizan el operador lambda =>, que se lee como "goes to". El lado izquierdo del operador lambda especifica los parámetros de entrada (si corresponde) y el lado derecho contiene el bloque de expresión o instrucción. La expresión lambda x => x * x se lee "x va a x veces x".

de MSDN


El término "lambda" se usa para referirse a una función anónima, generalmente un closure . Son útiles porque te permiten escribir funciones que usan otras funciones sin aumentar tu código innecesariamente. Por ejemplo, en Ruby:

(1..100).select {|num| num % 2 == 0}

Esto creará una matriz que contiene los números pares entre 1 y 100. No tenemos que escribir un bucle explícito: el método de selección toma una función que usa para probar los valores, por lo que todo lo que necesitamos es nuestra lógica personalizada. Esto nos permite personalizar enormemente el método prácticamente sin esfuerzo ni gastos generales. Básicamente, podemos componer funciones a partir de funciones más pequeñas.

Es solo un ejemplo fácil de lo que pueden hacer. La capacidad de pasar funciones como datos es realmente poderosa y los programadores de lenguaje funcionales rutinariamente hacen cosas realmente sorprendentes con ella.


Encontrarás todo lo que necesitas saber (sobre C # Lambdas) para empezar:
MSDN


La palabra "lambda" qua es una terminología de los días en que los tipos de ciencias de la computación tenían la misma probabilidad de ser entrenados en matemáticas o lógica que tener un título en ciencias de la computación. Algunos de ellos inventaron un paradigma llamado "programación funcional", bastante diferente de imperativo y bastante poderoso también. AFAIK ese es el medio donde el término entró en uso.

Los matemáticos y los lógicos están acostumbrados a usar palabras raras.

''lambda'' suena realmente esotérico, como si fuera algo muy extraño y especial. Realmente, si escribes JavaScript para una aplicación de navegador web y usas la expresión "var foo = function () {...}", has estado usando funciones lambda todo el tiempo.


Las lambdas en .NET a menudo se conocen como "azúcar sintáctico". No afectan directamente la funcionalidad, pero hacen que el idioma sea más fácil de usar para las personas.

Cuando haya comprendido el poder de usarlos, estoy seguro de que encontrará que va a escribir menos código en comparación con el estilo antiguo utilizando delegados / métodos anónimos.



Para obtener una explicación completa sobre las expresiones de Lambda, también echa un vistazo a Wikipedia . (Desplácese hasta la parte del cálculo de Lambda y los lenguajes de programación ). Las expresiones Lambda no son tan nuevas y no son solo parte de C #, sino algo que se introdujo en la informática hace casi 80 años. Las expresiones Lambda son la base de la programación funcional.

¿Es valioso? Bueno, considerando que en realidad es bastante viejo, diría: muy valioso para cualquiera que haga cálculos.


Sí, es solo una manera de meter muchas líneas de código en una sola expresión. Sin embargo, al ser un programa de aprendizaje tan eficiente, permite algunas formas nuevas de estructurar su programa.

A menudo uno evitaría escribir delegados o devoluciones de llamada y volver al estilo de procedimiento simplemente porque es demasiado trabajo para declarar nuevas funciones o clases para una sola expresión.

Las expresiones Lambda hacen que valga la pena utilizar devoluciones de llamada incluso para las tareas más pequeñas, lo que podría hacer que el código sea más claro. Tal vez no.


Si alguna vez ha trabajado con funciones / métodos que utilizan punteros de función, delegados, estrategia o patrón de observador / manejo de eventos, y pensó: "Estoy escribiendo toda esta función solo para usarla una vez - para pasarla a este método ; Desearía poder simplemente escribirlo en lugar de desordenar mi código "- ahí es donde puedes usar las funciones de Lambda. Los lenguajes que soportan este constructo también suelen aprovechar en gran medida el concepto de pasar funciones como parámetros, especialmente en lo que respecta al trabajo con listas (funciones de primera clase y funciones de orden superior). Esto es especialmente cierto para los lenguajes funcionales, que dependen de la composición de funciones en lugar de la modificación de la memoria para los cálculos. En algunos casos (en idiomas como Python), el uso de funciones lambda con listas de comprensión también se considera más legible que el ciclo foreach equivalente.


Si estás en Java, has escuchado mucho sobre lambdas o cierres en el último par de meses, porque hubo diferentes propuestas para agregar esta característica a Java 7. Sin embargo, creo que el comité lo descartó. Una de las propuestas es de Neal Gafter y se explica con gran detalle aquí: javac.info . Esto me ayudó a entender los casos de uso y las ventajas (especialmente sobre las clases internas)


Una expresión lambda es una forma simple de función. La idea es que algo de la forma de la izquierda (equivalente a los parámetros) se convierte en algo de la forma de la derecha (equivalente al cuerpo).

por ejemplo, en c sharp:

x => x * x

es un lambda para cuadrar un valor. Algo de la forma

x

se convierte en algo de la forma

x * x


El Dr. Dobbs Journal tiene un artículo útil que presenta expresiones lambda (dentro del contexto de C ++ pero creo que puedes aplicar los principios a cualquier idioma).

Como dice el artículo: "Una expresión lambda es una expresión muy compacta que no requiere una definición de clase / función separada".

Entonces, usando los ejemplos de los listados 1 y 2 de DDJ en vez de escribir:

std::for_each( vec.begin(), vec.end(), print_to_stream<std::string>(std::cout));

Lo cual requiere una definición de clase separada como:

template <typename T, typename Stream> class print_to_stream_t { Stream& stream_; public: print_to_stream_t(Stream& s):stream_(s) {} void operator()(const T& t) const { stream_ << t; } }; template <typename T,typename Stream> print_to_stream_t<T,Stream> print_to_stream(Stream& s) { return print_to_stream_t<T,Stream>(s); }

Usando la biblioteca Boost lambda esto puede convertirse en:

std::for_each(vec.begin(),vec.end(),std::cout << _1);

Que mantiene la definición en línea.

El artículo también explica algunas más aplicaciones de expresiones lambda.

Creo que un punto clave en el artículo de DDJ es "Normalmente, las expresiones lambda se usan cuando se necesitan funciones pequeñas y no excesivamente complejas en el sitio de llamadas. Si la función no fuera trivial, no querría una expresión lambda sino una función normal o un objeto de función ".