F# — это универсальный язык программирования для написания краткого, надежного и производительного кода.
F# позволяет писать неуклюжий самодокументируемый код, где фокус остается на вашем домене проблемы, а не сведения о программировании.
Это делается без ущерба для скорости и совместимости - это кроссплатформенная кроссплатформенная и взаимодействие.
open System // Gets access to functionality in System namespace.
// Defines a list of names
let names = [ "Peter"; "Julia"; "Xi" ]
// Defines a function that takes a name and produces a greeting.
let getGreeting name = $"Hello, {name}"
// Prints a greeting for each name!
names
|> List.map getGreeting
|> List.iter (fun greeting -> printfn $"{greeting}! Enjoy your F#")
F# имеет множество функций, в том числе:
Упрощенный синтаксис
Неизменяемый по умолчанию
Вывод типов и автоматическая обобщение
Функции первого класса
Мощные типы данных
Сопоставление шаблонов
Асинхронное программирование
Полный набор функций описан в руководстве по языку F#.
// Group data with Records
type SuccessfulWithdrawal =
{ Amount: decimal
Balance: decimal }
type FailedWithdrawal =
{ Amount: decimal
Balance: decimal
IsOverdraft: bool }
// Use discriminated unions to represent data of 1 or more forms
type WithdrawalResult =
| Success of SuccessfulWithdrawal
| InsufficientFunds of FailedWithdrawal
| CardExpired of System.DateTime
| UndisclosedFailure
Записи F# и дискриминированные профсоюзы являются непустыми, неизменяемыми и сопоставимыми по умолчанию, что делает их очень простыми в использовании.
Правильность с функциями и сопоставлением шаблонов
Функции F# легко определить. При сочетании с сопоставлением шаблонов они позволяют определить поведение, правильность которого применяется компилятором.
// Returns a WithdrawalResult
let withdrawMoney amount = // Implementation elided
let handleWithdrawal amount =
let w = withdrawMoney amount
// The F# compiler enforces accounting for each case!
match w with
| Success s -> printfn $"Successfully withdrew %f{s.Amount}"
| InsufficientFunds f -> printfn $"Failed: balance is %f{f.Balance}"
| CardExpired d -> printfn $"Failed: card expired on {d}"
| UndisclosedFailure -> printfn "Failed: unknown :("
Функции F# также являются первым классом, то есть они могут передаваться как параметры и возвращаться из других функций.
Функции для определения операций с объектами
F# имеет полную поддержку объектов, которые полезны при необходимости смешивать данные и функциональные возможности. Элементы и функции F# можно определить для управления объектами.
type Set<'T when 'T: comparison>(elements: seq<'T>) =
member s.IsEmpty = // Implementation elided
member s.Contains (value) =// Implementation elided
member s.Add (value) = // Implementation elided
// ...
// Further Implementation elided
// ...
interface IEnumerable<'T>
interface IReadOnlyCollection<'T>
module Set =
let isEmpty (set: Set<'T>) = set.IsEmpty
let contains element (set: Set<'T>) = set.Contains(element)
let add value (set: Set<'T>) = set.Add(value)
В F#часто создается код, который обрабатывает объекты как тип для управления функциями. Такие функции, как универсальные интерфейсы, выражения объектов и разумное использование элементов , распространены в более крупных программах F#.
Следующие шаги
Чтобы узнать больше о более крупном наборе функций F#, проверка тур F#.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
F# — это кроссплатформенный язык программирования с открытым кодом, который упрощает написание лаконичного, производительного, надежного и практичного кода. Это универсальный язык, позволяющий создавать множество различных типов приложений, таких как веб-API, классические приложения, приложения для Интернета вещей, игры и многое другое.