Одним из больших преимуществ F # является то, что он позволяет смешивать стиль функционального программирования с другими стилями (а именно, объектно-ориентированным и императивным). Поскольку большинство библиотек .NET являются объектно-ориентированными и обязательными, лучший способ получить доступ к функциональности .NET из F # - просто использовать императивные функции F #. Это означает, что при работе с объектами .NET идиоматический код F # будет выглядеть почти как C #.
РЕДАКТИРОВАТЬ : В следующем слегка измененном примере показано, как обернуть преобразование XSL в функцию, которая принимает имя входного файла и имя файла xsl. Возвращает MemoryStream
, где был записан вывод:
let transformDocument inputFile xslFile =
let doc = new XmlDocument()
doc.Load(inputFile)
let xsl = new XslCompiledTransform()
xsl.Load(xslFile)
let mem = new MemoryStream()
xsl.Transform(xml.CreateNavigator(), null, mem)
mem
И второй пример:
let doc = new XmlDocument("doc")
doc.Load("report.xml")
doc.AppendNode(new XmlElement("Happy"))
Это не означает, что вы отказываетесь от функционального стиля в любом случае - есть много возможностей использовать функциональный стиль при работе с классами .NET. Например, вы можете использовать функции более высокого порядка, такие как Seq.filter
и Seq.map
(или выражения последовательности), для обработки коллекций данных (или элементов XML). Вы все еще можете писать абстракции, используя функции высшего порядка.
Пространство имен System.Xml
очень важно, поэтому для функционального стиля не так много места. Однако код, который генерирует данные, хранящиеся в XML, может быть полностью функциональным. Возможно, стоит взглянуть на классы LINQ to XML (в .NET 3.5+), потому что они разработаны в гораздо более функциональной форме для программирования (так как предполагается, что они будут хорошо работать с LINQ, что тоже функционально).