Chat Kami Sekarang

F# adalah bahasa pemrograman fungsional yang membuatnya mudah untuk menulis kode yang benar dan memaintenancenya.

Pemrograman F# terutama melibatkan pendefinisian tipe dan fungsi yang disimpulkan tipe dan digeneralisasi secara otomatis. Ini memungkinkan fokus Anda untuk tetap pada domain masalah dan memanipulasi datanya, bukan pada detail pemrograman.

open System // Gets access to functionality in System namespace.

// Defines a function that takes a name and produces a greeting.
let getGreeting name =
sprintf “Hello, %s! Isn’t F# great?” name

[<EntryPoint>]
let main args =
// Defines a list of names
let names = [ “Don”; “Julia”; “Xi” ]

// Prints a greeting for each name!
names
|> List.map getGreeting
|> List.iter (fun greeting -> printfn “%s” greeting)

0

F# memiliki banyak fitur, termasuk:

  • Lightweight syntax

  • Immutable by default

  • Type inference and automatic generalization

  • First-class functions

  • Powerful data types

  • Pattern matching

  • Async programming

Rich data types

Jenis data seperti Record dan Discriminated Unions memungkinkan Anda mewakili data dan domain yang kompleks.

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

Record F# dan discriminated unions adalah non-null, tidak dapat diubah, dan dapat dicompare secara default, membuatnya sangat mudah digunakan.

Enforced correctness with functions and pattern matching

Fungsi F# mudah untuk di deklarasikan dan powerfull dalam praktiknya. Ketika dikombinasikan dengan pencocokan pola, mereka memungkinkan Anda untuk mendefinisikan perilaku yang kebenarannya ditegakkan oleh kompiler.

// 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 %O” d
| UndisclosedFailure -> printfn “Failed: unknown :(“

Fungsi F# juga first-class, artinya dapat dilewatkan sebagai parameter dan dikembalikan dari fungsi lainnya.

Functions to define operations on objects

F# memiliki dukungan penuh untuk objek, yang merupakan tipe data yang berguna ketika Anda perlu menggabungkan data dan fungsionalitas. Fungsi F# digunakan untuk memanipulasi objek.

type Set<[<EqualityConditionOn>] ‘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>

[<RequireQualifiedAccess>]
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)

Daripada menulis kode yang berorientasi objek, dalam F#, Anda akan sering menulis kode yang memperlakukan objek sebagai jenis data lain untuk fungsi untuk memanipulasi. Fitur seperti generik antarmuka, objek ekspresi, dan bijaksana penggunaan anggota yang umum di F# lebih besar program.