Ich habe mit F # in Visual Studio 2010 getüftelt. Ich bin ein Entwickler mit mehr Code/Architektur Design-Erfahrung in objektorientierten Sprachen wie C# und Java.Coding Practice für F #
Um meine Fähigkeiten zu erweitern und bessere Entscheidungen zu treffen, versuche ich verschiedene Sprachen, um verschiedene Dinge zu tun. Insbesondere die Kodierung "richtig" mit funktionalen Sprachen (in diesem Fall F #) bekommen.
Ein einfaches Beispiel erzeugt etwas XML und fügt dann einige Filter hinzu, um einige Elemente zu beseitigen.
Hier ist mein Code:
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()
Meine Fragen sind: Welche Dinge habe ich in diesem Szenario gut gemacht? Welche Teile könnten besser gemacht werden?
Ich freue mich schon sehr auf ein paar Ideen und freue mich auch darauf, mit funktionalen Paradigmen vertraut zu werden! :)
Vielen Dank im Voraus
+1 In der genau gleichen Situation hier (aber mit anderen Code offensichtlich) gut sein, die Antwort darauf zu sehen. – Jay
F # ist grundsätzlich so, dass es Zahlen für Sie, es hat eine sehr starke Inferenz-Engine, so sollten Sie sich daran gewöhnt Typ Annotation wegzulassen und Sie als generische wie Sie können – 0xFF
@martain_net, danke für den Tipp, das macht eine Menge Sinn tatsächlich :) Ich denke, ich habe die Typdefinition überstrapaziert, um die verschiedenen nativen F # -Typen zu verstehen (zB (string * string) liste bedeutet Liste von Tupeln mit 2 Strings). – Russell