1
Programación
Funcional en C#
Germán Küber
Microsoft Mvp
Software Architect
@germankuber
2
Beneficios de la Programación Funcional
Predictibilidad
Testiabilidad
Extensibilidad
3
Clean Code
Funciones deben aceptar no mas
de 3 parámetros
Funciones pequeñas
DRY
Evitar efectos secundarios
4
OO makes code
understandable by
encapsulating
moving parts. FP
makes
code
understandable by
minimizing moving
parts.
Michael
Feathers
5
¿Qué es la programación
funcional?
Es un paradigma que se centra en computar resultados en lugar de
ejecutar acciones.
6
Side Effects
7
Side Effects¿Qué son los efectos secundarios?
Comportamiento no detallado
en la firma
Efecto indeseable
Efecto no esperado
Una consecuencia de …
8
¿Por qué los efectos
secundarios son malos?
¿Qué esperamos de una función al llamarla?
9
Ejemplos de Side Effects
Modificar
parametros
Math.Random(
)
Modificar
estado
Llamada
a Api
10
Código Expresivo
11
Declaraciones
Defino Acciones
Ejecuto Side
Effects
var count = 0;
foreach (var item in list)
{
if (item > greaterThan)
++count;
}
return count;
12
Expresiones
Proceso datos
Produzco
resultados
int CountGreaterThan(int greaterThan,
List<int> list)
{
return list.Where(x => x > greaterThan)
.Count();
}
13
Componer Declaraciones
Programación Orientada a Objetos
var comparator = new CompareGreaterThan();
var count = 0;
foreach (var item in list)
{
var isGratter = comparator.Compare(item, greaterThan);
if (isGratter)
++count;
}
return count;
14
Componer Expresiones
Programación Funcional
int CountGreaterThan(int greaterThan,
List<int> list) =>
list.Where(Compare(greaterThan))
.Count();
15
Funciones como
Datos
16
Funciones de orden superior¿Y esto con que se come?
Funciones que aceptan otras funciones
Funciones que retornan funciones
17
Funciones de orden superior
Esto me suena a algo …
18
LINQ esta construido sobre
principios funcionales
Lo sabía
19
Filtrado y Ordenado
Imperativo
var position = 0;
while (position < list.Count)
{
if (list[position] % 2 != 0)
{
list.RemoveAt(position);
}
else
{
++position;
}
}
list.Sort();
20
Filtrado y Ordenado
Declarativo
list
.Where(x => x % 2 == 0)
.OrderBy(x => x);
21
Inmutabilidad
22
¿Por qué nos importa la
inmutabilidad?
Operaciones mutables === Código deshonesto
23
¿Por qué nos importa la inmutabilidad?
Reducción de bugs
Incrementa la legibilidad
Un único lugar donde validar invariantas
Automática thread safety
24
Código inmutable
C# 8.0
class User
{
public string Name { get; }
public string LastName { get; }
public User(string name, string lastName)
{
Name = name;
LastName = lastName;
}
}
25
Código inmutable
C# 9.0 – Data members
public data class Person { string FirstName; string LastName; }
public data class Person(string FirstName, string LastName);
26
DEMO
27
¿ Preguntas ?
28
GRACIAS!!!
Germán Küber
Microsoft Mvp
Software Architect
@germankuber

Programación Funcional C#