programacion programa eventos ejercicios ejemplos documentar delegados consola comandos codigo basicos aprender c# .net monads

eventos - programa en c#



¿Cuál es el escenario convincente para utilizar Mónadas en C#? (8)

Aquí hay uno de esos escenarios: desea crear una biblioteca de análisis (un buen ejemplo de un DSL incorporado), y descubre que las mejores son las bibliotecas combinadoras de analizadores monádicos. Así que lo escribe aprovechando los azúcares de sintaxis de LINQ para crear código C # que tiene la misma estructura que la gramática del lenguaje que está analizando, y obtiene los beneficios de un modelo de programación asombroso para el análisis semántico sobre la marcha y la recuperación de errores. . Ver este blog para una descripción.

Permítanme decir por adelantado que tengo una comprensión infantil de las mónadas. He leído los diversos hilos en Mónadas aquí y he hecho algunas horas de estudio sobre el concepto. Casi no me siento cómodo con el término, pero creo que es seguro decir que generalmente entiendo lo que es / hace una mónada.

Soy un desarrollador de C # que busca mejorar mi forma de trabajar. Lo que me ayudaría más en mi Monaducación es ver una aplicación en el mundo real de una Mónada en C # (es decir, a través de un linq SelectMany () o somesuch) que es claramente una mejora con respecto a otras formas de resolver el mismo tipo de problema en C #.

¿Alguien ha visto tal bestia?


Aquí hay uno de esos escenarios: desea escribir código que realice llamadas asíncronas secuenciales (por ejemplo, IO) sin mantener hilos, pero no desea escribir la maraña de espaguetis sin esperanzas en la que el modelo de programación asíncrono (BeginFoo / EndFoo) lo obliga a entrar . Por lo tanto, puede usar una mónada y azúcares LINQ y escribir código que parezca en línea recta pero que libera / cambia los hilos en todo momento. Vea este blog para una breve descripción.



Encuentra triples pitagóricos:

var r = from a in Enumerable.Range(1, 25) from b in Enumerable.Range(a, 25-a) from c in Enumerable.Range(b, 25-b) where a*a + b*b == c*c select new [] { a, b, c };


LINQ se usa en muchas soluciones (y a menudo se solicita en preguntas) aquí en . Revise las preguntas con la etiqueta LINQ y verá el uso en el mundo real.



Un ejemplo es simplificar null cheques null usando la mónada Maybe como se muestra en este artículo .


Recientemente hice un blog sobre la refactorización de un imperativo código real de C # en el mundo real (una función en NuGet ) para un estilo funcional y monádico (más concretamente, utilizando la mónada Maybe ). Hice lo mejor que pude hacerlo en pequeños pasos, explicando el paso posterior racional, por lo que creo que ayuda a comprender cómo las mónadas son útiles.