F# nedir?

F# kısa, sağlam ve performanslı kod yazmaya yönelik evrensel bir programlama dilidir.

F# programlama ayrıntıları yerine sorun etki alanınızda kaldığınız dağınık, kendi kendine belgelenen kod yazmanızı sağlar.

Bunu hız ve uyumluluktan ödün vermeden yapar- açık kaynak, platformlar arası ve birlikte çalışabilir.

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# şu özellikler dahil olmak üzere birçok özelliğe sahiptir:

  • Basit söz dizimi
  • Varsayılan olarak sabit
  • Tür çıkarımı ve otomatik genelleştirme
  • Birinci sınıf işlevler
  • Güçlü veri türleri
  • Desen eşleştirme
  • Zaman uyumsuz programlama

Tüm özellikler F# dil kılavuzunda belgelenmiştir.

Zengin veri türleri

Kayıtlar ve Ayrımcı Birleşimler gibi türler verilerinizi temsil etmenizi sağlar.

// 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# kayıtları ve ayrımcı birleşimler null olmayan, sabit ve varsayılan olarak karşılaştırılabilir olduğundan kullanımı çok kolaydır.

İşlevler ve desen eşleştirme ile doğruluk

F# işlevlerini tanımlamak kolaydır. Desen eşleştirme ile birleştirildiğinde, doğruluğu derleyici tarafından zorlanan davranışı tanımlamanıza olanak sağlar.

// 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# işlevleri de birinci sınıftır, yani bunlar parametre olarak geçirilebilir ve diğer işlevlerden döndürülebilir.

Nesneler üzerinde işlem tanımlamak için işlevler

F# nesneleri için tam desteğe sahiptir. Bu, verileri ve işlevleri karıştırmanız gerektiğinde kullanışlıdır. F# üyeleri ve işlevleri nesneleri işlemek için tanımlanabilir.

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# dilinde, genellikle nesneleri işlevlerin işlemesi için bir tür olarak değerlendiren bir kod yazarsınız. Genel arabirimler, nesne ifadeleri ve üyelerin judicious kullanımı gibi özellikler daha büyük F# programlarında yaygındır.

Sonraki adımlar

Daha büyük bir F# özellikleri kümesi hakkında daha fazla bilgi edinmek için F# Turu'na göz atın.