Resumé

Silverlight e F# finalmente insieme

Cristian Merighi () 5,00

Sono disponibili nuovi templates per Visual Studio: ora utilizzare librerie F# all'interno di un'applicazione Silverlight è davvero semplice!
Questo articolo è da considerarsi obsoleto. Alcune funzionalità potrebbero non essere più disponibili e non è possibile aggiungere commenti.

Questo articolo riguarda F# e Silverlight, ovvero "il matrimonio perfetto" (tesi).

Silverlight è sostanzialmente, per quanto mi riguarda, originalità della UI ed effetti d'animazione (non sono affatto attratto dai controlli à la WebForms, nonostante ne apprezzi l'elevata "skinnabilità").
Originalità della UI ed effetti d'animazione hanno bisogno di una potente programmazione a carattere matematico.
Tale tipo di programmazione si concilia meravigliosamente con la sintassi e le caratteristiche di F#.
CVD ;)

Scherzi a parte, i templates Silverlight di Visual Studio per progetti F# sono finalmente disponibili (qui) per entrambe le versioni 2 e 3!
È ora agevolmente possibile scrivere librerie F# referenziabili all'interno di una applicazione Silverlight.

Esemplifichiamo. Al solito.
Obiettivo:
Costruire un IValueConverter che traduca una PointCollection nell'aria contenuta dal relativo Polygon.

Abbozziamo l'implementazione step-by-step:

  • creare un progetto libreria di classi F# per Silverlight (ad esempio per la versione 3);
  • implementare un modulo che esponga i necessari algoritmi (in appropriato e sintetico F#);
  • referenziare tale libreria compilata nel progetto applicazione Siverlight (diciamo sviluppato in C#);
  • utilizzare i metodi esposti per sviluppare il Converter;
  • controllarne il funzionamento implementando una banale interfaccia dimostrativa (vedi figura sotto).

live demo

Finestra di Visual Studio coi nuovi templates:

F# projects

Ora diamo un'occhiata al codice F#.
L'algoritmo è abbstanza semplice: data una lista di punti nello spazio bidimensionale (x, y) ordinata (in senso antiorario in un sistema di coordinate levogiro), l'area del poligono che ha come vertici tali punti è calcolabile utilizzando la seguente formula
(Nota: Silverlight usa un sistema di coordinate destrorso)

formula

che, tradotta in F#, è qualcosa del tipo

#light

namespace Pacem.Science.Geometry

open System.Windows.Media

 

module public EuclideanGeometry =

    let public Area2D(polygon: PointCollection) =

        let n = polygon.Count

        let divideBy2 f = f * 0.5

        let step i = polygon.[i].X * polygon.[(i+1)%n].Y - polygon.[i].Y * polygon.[(i+1)%n].X

        {0..n-1}

        |> Seq.fold(fun acc i -> acc + step i ) 0.0

        |> divideBy2

Ora compiliamo, referenziamo e implementiamo il nostro IValueConverter:

public class AreaConverter : IValueConverter

{

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)

    {

        if (value is System.Windows.Media.PointCollection)

        {

            double area = Pacem.Science.Geometry.EuclideanGeometry.Area2D(

                (System.Windows.Media.PointCollection)value

                );

            if (targetType == typeof(double))

                return area;

            if (targetType == typeof(string))

            {

                if (parameter is string)

                    return area.ToString((string)parameter, culture);

                else

                    return area.ToString(culture);

            }

        }

        throw new NotImplementedException();

    }

 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

    {

        throw new NotImplementedException();

    }

}

Il più è fatto. Quanto al markup, rimando alla consultazione del codice, scaricabile dal link sotto.

Nota bene: demo e codice sono stati implementati con Silverlight 3 Beta1, Non prevedo intendo modificare questo articolo per aggiornarlo alle future versioni di Silverlight.

zip file « Silverlight AreaConverter

Take care. Bye.

Feedbacks

  • Visual Studio 2010

    Tuomas Hietanen martedì 4 agosto 2009 5,00

    Nice... I wish it would also work with Visual Studio 2010. But it doesn't. :-(

  • Re: Silverlight and F# happily ever after

    Art Scott giovedì 27 agosto 2009 0,00

    Nice Cristian. Tuomas: OK I'm interested VS2010 ... any news on this working there?

  • VS2010 and Silverlight 4

    Cristian Merighi sabato 13 novembre 2010 0,00

    Cameron Taggart communicated to me that he has upgraded the sample project to target VS2010 and Silveright 4. http://blog.ctaggart.com/2010/11/ryoushins-2d-area-f-silverlight-demo.html

  • Re: Silverlight and F# happily ever after

    Cameron Taggart lunedì 15 novembre 2010 5,00

    And now I've translated it to all F# and it can be used from the free VS 2010 shell http://blog.ctaggart.com/2010/11/create-f-silverlight-apps-from-visual.html

feedback
 

Syndicate

Autore

Cristian Merighi facebook twitter google+ youtube

Ultimi articoli

Top rated

Archivio

Dove sono?

Autore

Cristian Merighi facebook twitter google+ youtube

Le mie letture

Feeds