Маленькие прелести F#

19 Сен
2011

Должно быть, вы уже слышали о функциональном языке программирования разработанным компанией Microsoft и включенным в Visual Studio 2010, а также MonoDevelop.
На блоге есть большое количество статей по поводу написания приложений на F#, мне бы хотелось озвучить некоторые дополнительные возможности языка.

bigint

В F# заранее присутствует тип данных позволяющий работать с целыми числами, значения которых превышают uint64. На самом деле bigint является псевдонимом для System.Numerics.BigInteger ссылку на который можно добавить и в проекты C#, VB.Net. Работать с этим типом так же легко, как и с другими целочисленными типами, просто надо число заканчивать символом I.
let x = 2011I
let x2 = x * 10000000000000000000000I

Расширения

Очень приятная возможность языка F# — это расширять типы и модули. Это очень удобно, ведь иногда в классе, который вы используете, не предусмотрен какой-нибудь нужный вам метод, и вам приходится либо писать отдельно требующеюся функцию, либо создавать наследника от исходного класса. F# позволяет добавить любому типу нужный метод и использовать его, будто он там присутствовал с рожденья. Вот пример как это можно реализовать:
type System.Int32 with
member x. Square() = x * x

Как видите – всё просто и удобно. С модулями действия аналогичны. Только будьте внимательны: подобные методы не будут видны в других .Net языках.
Символьные операторы
Как и многие языки программирования F# поддерживает определения пользовательских символьных операторов. В отличие от других .Net языков F# дает больше свободы в данном вопросе. Вы можете создавать практически любые операторы, состоящие из набора следующих символов:
‘+’; ’-’; ’*’; ’/’; ’%’; ’<’; ’>’; ’|’; ’&’; ’`’; ’!’; ’?’; ’@’; ’^’; ’.’; (также можно употреблять двоеточие ‘:’, но при условии того, что этот символ будет использоваться в середине/конце оператора). Если наименование начинается с тильды, знака вопроса или знака восклицания, то используется префиксная нотация иначе суфиксная.
let rec (!) x =
if x <= 1 then 1
else x * !(x-1)

Единицы Измерения

Единицы измерения в F# — наиполезнейшая вещь способная сильно упростить жизнь. С помощью них легко строить различные проекты имеющие дело с физическими величинами. Например, F# сам поддерживает создание новых единиц измерения получаемых путем деления или умножения различных видов. Например: float<1/Hz>, float<m/s> и т.д.
Объявить и использовать такой тип можно следующим образом.
type second
let half_life (time: float) =
if time > 1000000000000.0 then
printfn “Stabiliti”
elif time < 1.0 then
printfn “Unstabiliti”
elif printfn “Other”
Кстати, в библиотеке FSharp.PowerPack.dll в модуле Microsoft.FSharp.Core.SI содержатся единицы измерения Си, которых, как мне кажется, будет достаточно для написания простых приложений.
Ну, вот и всё, чем я хотел с вами поделиться. Буду рад вопросам, критике, предложениям.
При написании поста пользовался знаниями из книги Криса Смита «Программирование на F#»
Спасибо за внимание.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх