Hoy me gustaría atraer vuestra atención sobre un lenguaje de programación seguramente no muy conocido por la mayoría y que, sin embargo, puede ser muy interesante sobre todo para los desarrolladores .NET.

F# (Sharp) es un lenguaje de programación de código abierto desarrollado por Microsoft en base al lenguaje ML que conjuga la programación funcional con el desarrollo orientado a objetos. F# está totalmente integrado en la plataforma .NET y en la principal herramienta de desarrollo de Microsoft, Visual Studio, desde sus versiones 2010, 2012 y 2013. Actualmente el lenguaje va por su versión 3.1.

El rasgo más característico de F# es su concepción como lenguaje multiparadigma ya que admite tanto construcciones de programación tradicional funcional como estructuras de programación orientada a objetos y otras basadas en el framework .NET.

Principales características de F# derivadas de los lenguajes de programación funcional

Inferencia de tipos

Pese a que F# es un lenguaje fuertemente tipado, los tipos de objetos no necesitan ser declarados explícitamente ya que son inferidos por el compilador en base al valor asignado al objeto.

      let sum = 2 + 5
      let result = "success"

En la primera instrucción la palabra clave let asigna el valor 7 a la variable sum de igual modo que en la segunda se asigna una cadena de caracteres a la variable result sin especificar el tipo en ningún caso.

Uso de expresiones lambda

Muy útiles para operar sobre listas sin necesidad de definir funciones.

    let list = List.map (fun i -> i + 1) [1;2;3]

Mediante una expresión lambda hemos sumado 1 a los valores de una lista.

Funciones como valores

Como lenguaje de programación funcional F# permite hacer con funciones todo lo que se puede hacer con los valores de forma sencilla tales como asignación como parámetro, almacenamiento en estructuras o funciones cruzadas.

    let multiplyByItSelf = fun n -> n * n

En la sentencia anterior a la variable multiplyByItSelf se le asigna una instrucción lambda encapsulada en una función que calcula el cuadrado de un valor dado.

Generalización automática

El compilador analiza cada parámetro en una función dada y determina si la función tiene dependencia de un tipo específico de dato.

     let max a b = if a > b then a else b

La función max permite la generalización de sus parámetros ya que los operadores de la función no hacen uso de un tipo específico.

Aplicación parcial de argumentos

Mediante el método de control de argumentos "currificación" si se proporciona a una función un número menor de argumentos que el esperado se creará una nueva función que espera los argumentos restantes.

     let smallPipeRadius = 2.0
     let bigPipeRadius = 3.0

Se definen las funciones que recogen la longitud como argumento restante

     let smallPipeVolume = cylinderVolume smallPipeRadius
     let bigPipeVolume = cylinderVolume bigPipeRadius

Se proporcina el argumento adicional para diversas longitudes

    let length1 = 30.0
    let length2 = 40.0
    let smallPipeVol1 = smallPipeVolume length1
    let smallPipeVol2 = smallPipeVolume length2
    let bigPipeVol1 = bigPipeVolume length1
    let bigPipeVol2 = bigPipeVolume length2

Junto a estas construcciones F# soporta muchas otras de la programación orientada a objetos y el framework .NET como por ejemplo: sobrecarga de operadores, extensiones de tipo y de objeto y acceso a código nativo.

Aplicaciones de F#

F# es utilizado en la programación web junto con varios frameworks entre los que destacan WebSharper y FunScript en los cuales F# es ejecutado como código .NET y en el desarrollo web para las plataformas Xamarin y Windows Phone; sin embargo F# es sobre todo utilizado como lenguaje de scripting especialmente orientado a aplicaciones de escritorio.

El lenguaje en la web

F# tiene un buen apoyo por parte del gigante de Redmond en internet donde cabría destacar su plataforma de Visual F# como web de referencia y es especialmente recomendable la web de aprendizaje de Microsoft Research TryF# para dar los primeros pasos en el manejo de este lenguaje.
En Youtube no abundan los tutoriales de F# pero aún así se pueden encontrar algunos muy útiles para los novatos.

Por otra parte aunque la comunidad F# sigue siendo mínima en comparación con otros lenguajes Madrid F# se empeña con gran esfuerzo por hacer llegar este lenguaje a la comunidad de programadores.

Como suponeis esto no ha sido más que un breve vistazo a F#. Desde el punto de vista de un programador .NET más o menos veterano como el que esto suscribe F# incorpora elementos muy útiles que realmente facilitan algunas de las tareas más comunes de un programador, en especial el manejo de expresiones lambda, las operaciones sobre listas, la creación de estructuras de tipos múltiples y el tratamiento y la asignación de funciones.

Y vosotros, ¿Conocéis F#? ¿Cómo ha sido vuestra experiencia con este lenguaje?. Contadnos vuestras impresiones en la sección de comentarios.