Sie sind auf Seite 1von 23

Programacin Funcional en C

Declarati va y Funciona l Dinmica Paralela

Declarati va y Funcional

Dinmi ca

Paralel a

enericidad
Garantiza que el tipo T tenga que se IComparable Y por tanto este cdigo es estticamente correcto

Si Cuenta es IComparable se puede ordenar un array de Cuenta

Cul es la limitacin de este enfoque?

r por diferentes criterios Al mtodo ordenar se le


pasa un IComparer

Cul es la limitacin de este El cdigo cliente implementa la enfoque? interface IComparer

Un comparador es entonces un objeto que solo se dedica a comparar

En la invocacin a Ordenar le pasa el objeto comparador

Definir una clase que implemente la interface IComparer por cada criterio de comparacin !!!

elegados
Definir una clase que implemente la interface IComparer por cada criterio de comparacin !!! Estamos ante clases que su nico objetivo es ofrecer un mtodo con una funcionalidad

Me representa a una funcin que recibe dos parmetros de tipo T1 y T2 y devuelve un resultado de tipo TResult

elegados

Mtodo que recibe como parmetros un array y una funcin que recibe dos parmetros del mismo tipo que el array y que devuelve un int Una tal funcin se usar como comparador

Funcionales y Genericidad otro buen maridaje

mo lo usamos?

Tiene que haber un mtodo definido y se le pasa el nombre

No tiene que haber un mtodo definido, este se construye en el lugar (delegados annimos)

Expresin lambda, una notacin ms simple 9

presiones Lambda

No hay que poner el tipo el compilador lo puede inferir Son el mismo tipo que el tipo del array, en este caso Email

10

inacin con los iteradores


Filtrar la fuente por una funcin que recibe un T y devuelve un

bool

Transformar los elementos de la fuente mediante una funcin que recibe un T y devuelve un R

Funcionales y Genericidad e Iteradores perfecto mnage a trois

DEMO

del ensimo nmero de Fibonacci

Clculo repetido de la funcin Para cualquier problema no siempre tiene por qu haber una solucin iterativa tan sencilla

Cul puede ser una solucin para no repetir algo y aprovechar la simplicidad de la solucin recursiva? 12

emorizacin
Dnde ponemos el array?

Utilizo un array para memorizar

Solucin imperativa Cmo podemos reutilizar este patrn de memorizacin sin tener que reproducirlo imperativamente dentro de cada funcin? 13

cional Memoization
Funcional Una funcin que recibe una funcin y devuelve otra funcin Funcional Memoization Una funcin que recibe una funcin y devuelve una funcin similar pero con la capacidad de memorizar los clculos que hace para no volverlos a repetir! Recibe una funcin de T en R Retorna una funcin de T en R Qu aspiramos poder hacer?

14

cional Memoization
Cul es la estructura de datos ms usada para memorizar? Retorna una funcin de la misma signatura de la que recibe Una funcin que recibe un T

y devuelve un R Usa un diccionario para memorizar El funcional devuelto conserva las entidades creadas en su scope (CLAUSURA). En este caso un diccionario para cada funcin que se memorice)

15

cional Memoization
Problema? Memoriza una llamada externa al mismo parmetro pero no dentro de la propia recursin

Requiere que el implementador de la funcin a memorizar lo tenga en cuenta

CP Reflexione sobre el por qu y sobre cmo podra lograrse una mejor alternativa

16

os Funcionales
Va acumulando la aplicacin de f a todos los elementos del

e
Cmo sumar todos los elementos de la lista?

Implemente Aggregate Algunos lenguajes tienen este tipo de funcionales como primitivas, incluso con sintaxis propia Disee e implemente otros funcionales que crea sean de utilidad

17

ados y Covarianza

Funcin que devuelve un polgono Funcin que devuelve un rectngulo

creaPoligono = creaRectangulo;

Implcitamente no hay covarianza en el mtodo de retorno de los delegados

gados y Coarianza
Indica que este parmetro genrico se va a usar para el tipo de retorno de un mtodo

Una funcin que se espera que devuelva un polgono puede ser sustituida por una funcin que devuelve un rectngulo

dos y Contravarianza

MayorPoligono = MayorTriangulo;?

dos y Contravarianza

MayorTriang = MayorPolig; ?

Dentro del mtodo el tipo T1 solo puede ser usado como el tipo de parmetros de entrada del mtodo

dos y Contravarianza

Definicin de mtodo que dados dos polgonos devuelve el menor rectngulo que los contiene

Definicin de mtodo que dados dos rectngulos devuelve el menor rectngulo que los contiene (posible implementacin ms fcil y eficiente) BoundingDePoligonos = BoundingDeRectangulos; ?

Por qu no da error?

New features in C# 4.0, Mads Torgersen MSDN, video PDC, Object Oriented Software Construction, Bertrand Meyer Covariance and Contravariance in C#, Eric Lippert's Blog

Das könnte Ihnen auch gefallen