Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
F# es un lenguaje de programación universal para escribir código concisa, sólido y eficaz.
F# permite escribir código desordenado y autodocumentado, donde el foco permanece en el dominio del problema, en lugar de los detalles de la programación.
Lo hace sin comprometer la velocidad y la compatibilidad: es de código abierto, multiplataforma e interoperable.
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# tiene numerosas características, entre las que se incluyen:
- Sintaxis simplificada
- Inmutable de forma predeterminada
- Inferencia de tipos y generalización automática
- Funciones de primera clase
- Tipos de datos eficaces
- Coincidencia de patrones
- La programación asíncrona
En la guía del lenguaje F#se documenta un conjunto completo de características.
Tipos de datos enriquecidos
Los tipos como Registros y Uniones discriminadas le permiten representar los datos.
// 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
Los registros y uniones discriminadas de F# son inmutables, comparables de forma predeterminada y no permiten valores nulos, lo que los hace muy fáciles de usar.
Exactitud mediante funciones y coincidencia de patrones
Las funciones de F# son fáciles de definir. Cuando se combina con la coincidencia de patrones, permiten definir el comportamiento cuya corrección aplica el compilador.
// 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 :("
Las funciones de F# también son de primera clase, lo que significa que se pueden pasar como parámetros y devolverse de otras funciones.
Funciones para definir operaciones en objetos
F# tiene compatibilidad completa con objetos, que son útiles cuando se necesitan combinar datos y funcionalidades. Los miembros y funciones de F# se pueden definir para manipular objetos.
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)
En F#, a menudo escribirá código que trate los objetos como un tipo para que las funciones los manipulen. Las características como interfaces genéricas, expresiones de objeto y uso sensato de miembros son comunes en programas de F# más grandes.
Pasos siguientes
Para obtener más información sobre un conjunto mayor de características de F#, consulte el tour de F#.