Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se presentan los conceptos y la terminología de las transformaciones funcionales puras. El enfoque de transformación funcional para transformar los datos produce código que a menudo es más rápido de programar, más expresivo y más fácil de depurar y mantener que la programación imperativa más tradicional.
Tenga en cuenta que los artículos de esta sección no están diseñados para explicar completamente la programación funcional. En su lugar, estos artículos identifican algunas de las funcionalidades de programación funcional que facilitan la transformación de XML de una forma a otra.
¿Qué es la transformación funcional pura?
En la transformación funcional pura, un conjunto de funciones, denominadas funciones puras, define cómo transformar un conjunto de datos estructurados de su forma original en otra forma. La palabra "puro" indica que las funciones son componibles, lo que requiere que sean:
- Independiente, para que se puedan ordenar y reorganizar libremente sin entrelazamiento o interdependencias con el resto del programa. Las transformaciones puras no tienen conocimiento ni efecto sobre su entorno. Es decir, las funciones usadas en la transformación no tienen efectos secundarios.
- Sin estado, de modo que la ejecución de la misma función o un conjunto específico de funciones en la misma entrada siempre dará como resultado la misma salida. Las transformaciones puras no tienen memoria de su uso anterior.
Importante
En el resto de este tutorial, el término "función pura" se usa en un sentido general para indicar un enfoque de programación y no una característica de lenguaje específica.
Tenga en cuenta que las funciones puras deben implementarse como métodos en C#, y como funciones en Visual Basic.
No debe confundir las funciones puras con métodos virtuales puros en C++. Este último indica que la clase contenedora es abstracta y que no se proporciona ningún cuerpo del método.
Programación funcional
La programación funcional es un enfoque de programación que admite directamente la transformación funcional pura.
Históricamente, los lenguajes de programación funcionales de uso general, como ML, Scheme, Haskell y F#, han sido principalmente de interés para la comunidad académica. Aunque siempre ha sido posible escribir transformaciones funcionales puras en C# y Visual Basic, la dificultad de hacerlo no ha hecho que sea una opción atractiva para la mayoría de los programadores. Sin embargo, en las versiones recientes de estos lenguajes, las nuevas construcciones de lenguaje, como expresiones lambda y inferencia de tipos, hacen que la programación funcional sea mucho más fácil y productiva.
Para obtener más información sobre la programación funcional, consulte Programación funcional frente a programación imperativa.
Lenguajes de programación funcional específicos del dominio
Aunque los lenguajes de programación funcional generales no se han adoptado ampliamente, algunos lenguajes de programación funcional específicos del dominio han tenido un mejor éxito. Por ejemplo, las hojas de estilos en cascada (CSS) se usan para determinar la apariencia de muchas páginas web y las hojas de estilos del lenguaje de hojas de estilos extensibles (XSLT) se usan ampliamente en la manipulación de datos XML. Para obtener más información sobre XSLT, vea Transformaciones XSLT.
Terminología
En la lista siguiente se definen algunos términos relacionados con las transformaciones funcionales.
función de orden superior (primera clase)
Función que se puede tratar como un objeto mediante programación. Por ejemplo, una función de orden superior puede ser pasada a otras funciones o devuelta desde ellas. En C# y Visual Basic, los delegados y las expresiones lambda son características de lenguaje que admiten funciones de orden superior. Si desea escribir una función de orden superior, deberá declarar uno o más argumentos para recibir delegados, y a menudo utilizará expresiones lambda cuando llame a dichas funciones. Muchos de los operadores de consulta estándar son funciones de orden superior.
Para obtener más información, vea Información general sobre operadores de consulta estándar (C#) y Información general sobre operadores de consulta estándar (Visual Basic).
Expresión lambda
Básicamente, una función anónima en línea que se puede usar siempre que se espere un tipo de delegado. Se trata de una definición simplificada de expresiones lambda, pero es adecuada para los fines de este tutorial.
Para obtener más información, vea Expresiones lambda (Guía de programación de C#) y Expresiones lambda (Visual Basic)).
colección
Un conjunto estructurado de datos, normalmente de un tipo uniforme. Para ser compatible con LINQ, una colección debe implementar la IEnumerable interfaz o la IQueryable interfaz (o uno de sus homólogos genéricos o IEnumerator<T>IQueryable<T> ).
Tupla (tipos anónimos)
Un concepto matemático, una tupla es una secuencia finita de objetos, cada uno de un tipo específico. A las tuplas también se las conoce como listas ordenadas. Los tipos anónimos son una implementación de lenguaje de este concepto, que permite declarar un tipo de clase sin nombre y un objeto de ese tipo al mismo tiempo.
Para obtener más información, vea Tipos anónimos (Guía de programación de C#) y Tipos anónimos (Visual Basic) .
Inferencia de tipos (tipos implícitos)
La capacidad de un compilador para determinar el tipo de una variable en ausencia de una declaración de tipo explícita.
Para obtener más información, vea Variables locales con tipo implícito (Guía de programación de C#) y Inferencia de tipos locales (Visual Basic).
ejecución diferida y evaluación perezosa
Retraso de la evaluación de una expresión hasta que se requiera realmente su valor resuelto. Las colecciones admiten la ejecución aplazada.
Para obtener más información de C#, vea Introducción a las consultas LINQ (C#) y Ejecución diferida y evaluación perezosa en LINQ a XML (C#).
Para obtener más información de Visual Basic, vea Operaciones de consulta básicas (Visual Basic) y Ejecución diferida y Evaluación diferida en LINQ to XML (Visual Basic).
Estas características de lenguaje se usarán en ejemplos de código en esta sección.