Mi sono dilettato con F # in Visual Studio 2010. Sono uno sviluppatore con più esperienza di progettazione di codice/architettura in linguaggi orientati agli oggetti come C# e Java.Coding Practice for F #
Per espandere il mio set di competenze e aiutare a prendere decisioni migliori sto provando diverse lingue per fare cose diverse. In particolare, prendi il codice della codifica "correttamente" usando i linguaggi funzionali (in questo caso F #).
Un semplice esempio sta generando alcuni XML, quindi aggiungendo alcuni filtri per eliminare alcuni elementi.
Ecco il mio codice:
open System
open System.Xml.Linq
let ppl:(string * string) list = [
("1", "Jerry");
("2", "Max");
("3", "Andrew");
]
/// Generates a Person XML Element, given a tuple.
let createPerson (id:string, name:string) = new XElement(XName.Get("Person"),
new XAttribute(XName.Get("ID"), id),
new XElement(XName.Get("Name"), name)
)
/// Filter People by having odd ID's
let oddFilter = fun (id:string, name:string) -> (System.Int32.Parse(id) % 2).Equals(1)
/// Open filter which will return all people
let allFilter = fun (id:string, name:string) -> true
/// Generates a People XML Element.
let createPeople filter = new XElement(XName.Get("People"),
ppl |> List.filter(filter) |> List.map createPerson
)
/// First XML Object
let XmlA = createPeople oddFilter
/// Second XML Object
let XmlB = createPeople allFilter
printf "%A\n\n%A" XmlA XmlB
/// Waits for a keypress
let pauseKey = fun() -> System.Console.ReadKey() |> ignore
pauseKey()
Le mie domande sono: Quali sono le cose ho fatto bene in questo scenario? Quali parti potrebbero essere fatte meglio?
Non vedo davvero l'ora di alcune idee e sono abbastanza entusiasta di conoscere anche i paradigmi funzionali! :)
Grazie in anticipo
+1 Nella stessa identica situazione qui (ma con codice diverso ovviamente) è bello vedere la risposta a questo. – Jay
F # è fatto fondamentalmente in modo che rappresenti il tipo per te, ha un motore di inferenza molto forte, quindi dovresti abituarti a omettere l'annotazione del tipo e renderti le funzioni più generiche che puoi – 0xFF
@martain_net, grazie per il suggerimento, che rende molto senso in realtà :) Penso di aver abusato della definizione del tipo per capire i diversi tipi nativi di F # (es. lista (stringa * stringa) significa lista di tuple con 2 stringhe). – Russell