Share via


Wat is F?#

F# is een universele programmeertaal voor het schrijven van beknopte, robuuste en performante code.

Met F# kunt u overzichtelijke, zelfdocumenterende code schrijven, waarbij uw focus op uw probleemdomein blijft, in plaats van de details van programmeren.

Het doet dit zonder afbreuk te doen aan snelheid en compatibiliteit: het is opensource, platformoverschrijdend en interoperabel.

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# heeft talloze functies, waaronder:

  • Lichtgewicht syntaxis
  • Onveranderbaar standaard
  • Type deductie en automatische generalisatie
  • Eersteklas functies
  • Krachtige gegevenstypen
  • Patroonherkenning
  • Asynchroon programmeren

Een volledige set functies wordt beschreven in de F#-taalhandleiding.

Uitgebreide gegevenstypen

Met typen zoals Records en Gediscrimineerde unions kunt u uw gegevens vertegenwoordigen .

// 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#-records en gediscrimineerde samenvoegingen zijn niet-null, onveranderbaar en vergelijkbaar, waardoor ze zeer eenvoudig te gebruiken zijn.

Juistheid met functies en patroonkoppeling

F#-functies zijn eenvoudig te definiëren. In combinatie met patroonkoppeling kunt u gedrag definiëren waarvan de juistheid wordt afgedwongen door de compiler.

// 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#-functies zijn ook eersteklas, wat betekent dat ze kunnen worden doorgegeven als parameters en worden geretourneerd vanuit andere functies.

Functies voor het definiëren van bewerkingen op objecten

F# biedt volledige ondersteuning voor objecten, wat handig is wanneer u gegevens en functionaliteit moet combineren. F#-leden en -functies kunnen worden gedefinieerd om objecten te bewerken.

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)

In F# schrijft u vaak code waarmee objecten worden behandeld als een type voor functies om te bewerken. Functies zoals algemene interfaces, objectexpressies en het gebruik van leden zijn gebruikelijk in grotere F#-programma's.

Volgende stappen

Bekijk de F#-rondleiding voor meer informatie over een grotere set F#-functies.