Por Timilehin Omolana
CuotaPíoCuotaCorreo electrónico

Aprenda cómo las lambdas pueden hacer que su código sea más eficiente y más fácil de mantener.

Los lenguajes de programación evolucionan continuamente, incluso aquellos como C++ que se establecieron hace mucho tiempo. Agregan funciones a las bibliotecas estándar y realizan otros cambios para facilitar el trabajo de los programadores que trabajan en un campo dinámico.

Como parte de las actualizaciones provocadas por la evolución del lenguaje, C++ agregó soporte para expresiones lambda en su versión de 2011.

¿Qué es exactamente una expresión lambda y cómo puede usarla a su favor como programador de C++?

¿Qué es una expresión lambda?

Una expresión lambda también se conoce como función lambda. Es una expresión en línea con la capacidad de aceptar argumentos, realizar operaciones y devolver un valor, al igual que una función típica.

Puede usar una lambda dentro de otra función y asignarla a una variable. Las funciones de Lamba son una forma práctica de definir un objeto de función anónimo en un programa. Casi todos los idiomas admiten lambdas, aunque cada implementación varía de las demás.

instagram viewer

¿Cuáles son las partes de una expresión Lambda de C++?

Las expresiones lambda son fáciles de usar en C++. Puede desglosar la sintaxis de una expresión lambda en C++ de la siguiente manera:

[capture_clause](parámetros) opciones { expression_body; }

Por ejemplo:

En t valor = 13;
auto sumaPlusVal = [val](En t a, En t b) mudableno excepto ->En t { devolver valor + a + b; };
sumaMásVal(2, 5); // 20

Este código declara el sumaPlusVal variable auto porque una expresión lambda puede aceptar y devolver cualquier tipo de datos. Esto deja al compilador determinar el tipo durante la compilación.

En el código anterior, puede ver que una expresión lambda contiene varias partes que especifican cómo funciona. Aquí hay una descripción general rápida de cada uno de estos componentes.

  1. Cláusula de captura: esta es la primera parte de una expresión lambda donde puede especificar variables preexistentes o definir otras nuevas para usar en el cuerpo de la expresión. Hay diferentes formas de especificar capturas, por ejemplo:
    añadir dos automáticamente = [foo](){ devolver foo + 2; }; // por valor
    añadir tres automáticamente = [&barra](){ devolver barra + 3; }; // por referencia
    auto addAllVal = [=](){ devolver foo + bar; }; // todo por valor
    auto añadirTodasRef = [&](){ devolver foo + bar; }; // todo por referencia

    // crea una variable en la cláusula de captura
    auto createVarInCapture = [fooBar = foo + bar](){ devolver FooBar * 5; };

    // sin captura: devuelve un error porque no se puede acceder a foo
    auto errorExpresión = [](){ devolver foo + 2; };

  2. Parámetros: Esta parte de la expresión lambda también es opcional. Contiene los parámetros de función requeridos por la lambda. Esto no es diferente de la forma habitual en que definiría los parámetros de función en C++.
  3. Opciones: También puede especificar opciones al definir una expresión lambda. Algunas opciones que podrías usar son: mudable, excepción (p.ej no excepto en el primer código de muestra), ->tipo_retorno (p.ej ->int), requiere, atributos, etc. los mudable La opción se usa a menudo porque permite que las capturas sean modificables dentro de la lambda. El siguiente código demuestra esto.
    En t valor = 10;

    // devuelve un error: el valor es una const dentro de la expresión
    decremento automático = [valor](){ devolver --valor; };
    incremento automático = [valor]() mutable { devolver ++valor; };
    incremento(); // 11

    Aunque las otras opciones rara vez se usan, puede obtener más información sobre ellas en el cppreference.com página sobre lambdas.
  4. cuerpo de expresion: Este es el cuerpo de la expresión lambda que ejecuta y devuelve un valor, como lo haría una función. Si es necesario, puede dividir el cuerpo de una expresión lambda en más de una línea. Sin embargo, es una buena práctica mantenerlo lo más breve posible para evitar el código desorganizado.

¿Cuáles son los beneficios de las expresiones lambda?

Hay muchas ventajas en el uso de funciones lambda en su código. Además de una mayor velocidad y eficiencia de desarrollo, los principales beneficios que recibe de las lambdas son los siguientes:

  • Las expresiones lambda ayudan a mantener limpio el código. Una de las mejores maneras de mantener su código simple y ordenado es usar lambdas siempre que sea posible. Esto puede ser muy útil para mantener una estructura de código legible y reutilizable.
  • Puedes pasar lambdas a otras funciones como parámetros.. los Biblioteca estándar de C++std:: ordenar() método hace uso de este beneficio. Puede pasar una lambda como uno de los parámetros de este método para especificar cómo la función debe realizar la ordenación. Por ejemplo:
     estándar:: vector<En t> ar = {2, 5, 1, 3, 4};
    std:: sort (arr.begin(), arr.end(), [](En t a, En t b){ devolver un // dirección = {1, 2, 3, 4, 5}
  • Las lambdas son reutilizables.. A veces, es posible que desee hacer que un bloque de código sea reutilizable en el ámbito de una función de su programa sin tener que definir una función nueva. Lambdas puede ser muy útil en tales casos. Considere el siguiente ejemplo de una expresión lambda reutilizable:
    #incluir <iostream>
    usando espacio de nombresestándar;

    En tprincipal(){
    // definir una lambda reutilizable
    suma automática = [](auto a, auto b, auto c) no excepto {
    cout <<"Ahora sumando... "<< a <<", "<< b <<" y "<< C << fin;
    devolver a + b + c ;
    };

    cout << sumar (22, 33, 44) << fin;
    cout << sumar (cadena ("Contento "), cuerda("Nacimiento"), cuerda("día")) << fin;
    cout << suma(verdadero, falso, verdadero) << estándar:: endl; // se ejecuta como números (1 y 0)
    }

    Este programa produce el siguiente resultado: Este ejemplo demuestra lo simple que es definir una lambda para que pueda usarla con cualquier tipo.

Usando Lambda en C++

Hay muchos otros beneficios que ofrecen las expresiones lambda, y los descubrirá a medida que la estructura de su programa se vuelva más compleja. De hecho, los programadores de C++ a veces se refieren a las expresiones lambda como cierres porque son una excelente manera de implementar cierres en el código.

Debe considerar las expresiones lambda si desea incorporar conceptos modernos de C++ en su base de código.

11 fragmentos de código C++ para problemas de programación cotidianos

Leer siguiente

CuotaPíoCuotaCorreo electrónico

Temas relacionados

  • Programación
  • Programación
  • Tutoriales de codificación

Sobre el Autor

Timilehin Omolana (5 artículos publicados)

Timilehin es un ingeniero de software y escritor técnico al que le encanta explorar el mundo de las tecnologías del lado del servidor y los sistemas distribuidos.

Más de Timilehin Omolana

Suscríbete a nuestro boletín

¡Únase a nuestro boletín para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!

Haga clic aquí para suscribirse