[F#] Operadores simbólicos

Lo que más me gusta de la programación funcional es su proximidad con las matemáticas, es decir, con un estilo funcional la barrera entre el razonamiento matemático y el como lo plasmo en el código es mucho menor. Así, entendemos todo como funciones al estilo f(x) o g(f(x))) y empezamos a notar lo fácil que es llevar este razonamiento a funciones y funciones de orden superior. Sin embargo, en el mundo de las matemáticas tenemos una gran cantidad de operaciones representadas por símbolos, por ejemplo, el símbolo +, que representa la adición.

Dicha operación puede ser plasmada en el código de la forma: add a b siendo a y b tipos numéricos (no me preguntes sobre el cuerpo de la función:P). Pero resulta tedioso tener que sumar números de esta forma let sum = add 1 2, Por fortuna, tenemos una serie de operadores que nos permiten realizar estas operaciones de forma más sencilla (de una forma más matemática), facilitando, entre otras cosas, la legibilidad de nuestro código.

En le caso de F#, tenemos una gran cantidad de operadores built-in, pero además, ¡tenemos la posibilidad de crear nuevos! esto es, escribir funciones cuyo nombre sea un operador aritmético. Técnicamente cualquier secuencia de los símbolos: !%&*+-./<=>@^|?

Por ejemplo, para definir un operador simbólico para calcular el factorial de un numero:

let rec (!) x =
	if x <= 1 then 1
	else x * !(x - 1)

Con esto, podemos escribir código con un estilo un poco más matemático y elegante: > !10;;

O una función que compare el valor de dos strings ignorando el case:

let (===) x y =	           
            String.Equals(x, y, StringComparison.InvariantCultureIgnoreCase)

Cabe anotar que, al ser funciones, los operadores simbólicos pueden ser pasados como parámetros a funciones de orden superior, solo hay que usar los paréntesis alrededor del operador:

>List.map (!) [1..5];;
val it : int list = [1; 2; 6; 24; 120]

Notas finales

Me parece preciso aclarar que esto no es lo mismo que tenemos en C# con la sobrecarga de operadores.

Hay una forma de poder utilizar operadores Unicode, al estilo de: ∑, empleando la extensión Math Symbol.

Espero les sea de utilidad.

Hasta el próximo post.

Anuncios
[F#] Operadores simbólicos

Un comentario en “[F#] Operadores simbólicos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s