Apa yang dimaksud dengan F#

F# adalah bahasa pemrograman universal untuk menulis kode yang singkat, kuat, dan berkinerja.

F# memungkinkan Anda untuk menulis kode dokumentasi mandiri yang rapi, dan memfokuskan diri Anda tetap pada domain masalah, daripada detail pemrograman.

F# melakukan ini tanpa mengorbankan kecepatan dan kompatibilitas - F# merupakan sumber terbuka, lintas platform, dan memiliki keterkaitan operasi.

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# memiliki banyak fitur, meliputi:

  • Sintaks ringan
  • Tidak dapat diubah secara default
  • Inferensi jenis dan generalisasi otomatis
  • Fungsi kelas utama
  • Jenis data yang kuat
  • Pencocokan pola
  • Pemrograman asinkron

Serangkaian fitur lengkap didokumentasikan dalam panduan bahasa F#.

Kaya jenis data

Jenis seperti Rekaman dan Gabungan Terdiskriminasi memungkinkan Anda mewakili data Anda.

// 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

Rekaman F# dan gabungan terdiskriminasi secara default tidak null, tidak dapat diubah, dan sebanding sehingga membuatnya sangat mudah digunakan.

Ketepatan fungsi dan pencocokan pola

Fungsi F# mudah didefinisikan. Ketika dikombinasikan dengan pencocokan pola, fungsi F# memungkinkan Anda untuk menentukan perilaku yang ketepatannya diberlakukan oleh kompilator.

// 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 :("

Fungsi F# juga merupakan kelas utama, yang berarti fungsi tersebut dapat diteruskan sebagai parameter dan dikembalikan dari fungsi lain.

Fungsi untuk menentukan operasi pada objek

F# memiliki dukungan penuh bagi objek sehingga berguna ketika Anda perlu memadukan data dan fungsi. Anggota dan fungsi F# dapat ditentukan untuk memanipulasi objek.

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)

Dalam F#, Anda akan sering menulis kode yang memperlakukan objek sebagai jenis fungsi untuk dimanipulasi. Fitur seperti antarmuka generik, ekspresi objek, dan penggunaan anggota yang beralasan bersifat umum dalam program F# yang lebih besar.

Langkah berikutnya

Untuk mempelajari lebih lanjut tentang serangkaian fitur F# yang lebih besar, lihat Tur F#.