Pengikatan let
Pengikatan mengaitkan pengidentifikasi dengan nilai atau fungsi. Gunakan kata kunci let
untuk mengikat nama ke nilai atau fungsi.
Sintaks
// Binding a value:
let identifier-or-pattern [: type] =expressionbody-expression
// Binding a function value:
let identifier parameter-list [: return-type ] =expressionbody-expression
Keterangan
Kata kunci let
digunakan dalam ekspresi pengikatan guna menentukan nilai atau nilai fungsi untuk satu atau beberapa nama. Berikut adalah bentuk ekspresi let
paling sederhana mengikat nama ke nilai sederhana.
let i = 1
Jika memisahkan ekspresi dari pengidentifikasi menggunakan baris baru, Anda harus mengindentasi setiap baris ekspresi, seperti dalam kode berikut.
let someVeryLongIdentifier =
// Note indentation below.
3 * 4 + 5 * 6
Alih-alih hanya nama, pola yang berisi nama dapat ditentukan, misalnya, tuple, seperti yang ditunjukkan dalam kode berikut.
let i, j, k = (1, 2, 3)
body-expression adalah ekspresi tempat nama digunakan. Ekspresi isi muncul di barisnya sendiri, diindentasi agar sejajar persis seperti karakter pertama dalam kata kunci let
:
let result =
let i, j, k = (1, 2, 3)
// Body expression:
i + 2 * j + 3 * k
Pengikatan let
dapat muncul di tingkat modul, dalam definisi jenis kelas, atau dalam cakupan lokal, seperti dalam definisi fungsi. Pengikatan let
di tingkat atas dalam modul atau dalam jenis kelas tidak perlu memiliki ekspresi isi, tetapi pada tingkat cakupan lain, ekspresi isi diperlukan. Nama terikat dapat digunakan setelah titik definisi, tetapi tidak pada titik sebelum pengikatan let
muncul, seperti yang diilustrasikan dalam kode berikut.
// Error:
printfn "%d" x
let x = 100
// OK:
printfn "%d" x
Pengikatan Fungsi
Pengikatan fungsi mengikuti aturan untuk pengikatan nilai, kecuali jika pengikatan fungsi menyertakan nama fungsi dan parameter, seperti yang ditunjukkan dalam kode berikut.
let function1 a = a + 1
Secara umum, parameter adalah pola, seperti pola tuple:
let function2 (a, b) = a + b
Ekspresi pengikatan let
mengevaluasi ke nilai ekspresi terakhir. Oleh karena itu, dalam contoh kode berikut, nilai result
dikomputasi dari 100 * function3 (1, 2)
, yang mengevaluasi ke 300
.
let result =
let function3 (a, b) = a + b
100 * function3 (1, 2)
Untuk informasi selengkapnya, lihat Fungsi.
Anotasi Jenis
Anda dapat menentukan jenis untuk parameter dengan menyertakan titik dua (:) diikuti nama jenis, semuanya diapit tanda kurung. Anda juga dapat menentukan jenis nilai pengembalian dengan menambahkan titik dua dan jenis setelah parameter terakhir. Anotasi jenis lengkap untuk function1
, dengan bilangan bulat sebagai jenis parameter, adalah sebagai berikut.
let function1 (a: int) : int = a + 1
Ketika tidak ada parameter jenis eksplisit, inferensi jenis digunakan untuk menentukan jenis parameter fungsi. Ini dapat mencakup generalisasi secara otomatis jenis parameter menjadi generik.
Untuk informasi selengkapnya, lihat Generalisasi Otomatis dan Inferensi Jenis.
Pengikatan let di Kelas
Pengikatan let
dapat muncul dalam jenis kelas tetapi tidak dalam struktur atau jenis rekaman. Untuk menggunakan pengikatan let dalam jenis kelas, kelas harus memiliki konstruktor utama. Parameter konstruktor harus muncul setelah nama jenis dalam definisi kelas. Pengikatan let
dalam jenis kelas menentukan bidang privat dan anggota untuk jenis kelas tersebut dan, bersama dengan pengikatan do
dalam jenis, membentuk kode untuk konstruktor utama bagi jenis tersebut. Contoh kode berikut menunjukkan kelas MyClass
dengan bidang privat field1
dan field2
.
type MyClass(a) =
let field1 = a
let field2 = "text"
do printfn "%d %s" field1 field2
member this.F input =
printfn "Field1 %d Field2 %s Input %A" field1 field2 input
Cakupan field1
dan field2
terbatas pada jenis di mana mereka dideklarasikan. Untuk informasi selengkapnya, lihat Pengikatan let
di Kelas dan Kelas.
Parameter Jenis di Pengikatan let
Pengikatan let
pada tingkat modul, dalam jenis, atau dalam ekspresi komputasi dapat memiliki parameter jenis eksplisit. Pengikatan let dalam ekspresi, seperti dalam definisi fungsi, tidak dapat memiliki parameter jenis. Untuk informasi selengkapnya, lihat Generik.
Atribut pada Pengikatan let
Atribut dapat diterapkan ke pengikatan let
tingkat atas dalam modul, seperti yang ditunjukkan dalam kode berikut.
[<Obsolete>]
let function1 x y = x + y
Cakupan dan Aksesibilitas Pengikatan Let
Cakupan entitas yang dinyatakan dengan pengikatan let terbatas pada bagian cakupan yang berisi (seperti fungsi, modul, file, atau kelas) setelah pengikatan muncul. Oleh karena itu, dapat dikatakan bahwa pengikatan let memperkenalkan nama ke dalam cakupan. Dalam modul, nilai atau fungsi let-bound dapat diakses oleh klien modul selama modul dapat diakses, karena pengikatan let dalam modul dikompilasi ke dalam fungsi publik modul. Sebaliknya, pengikatan let di kelas bersifat privat bagi kelas.
Biasanya, fungsi dalam modul harus memenuhi syarat oleh nama modul saat digunakan oleh kode klien. Misalnya, jika modul Module1
memiliki fungsi function1
, pengguna akan menentukan Module1.function1
untuk merujuk ke fungsi.
Pengguna modul dapat menggunakan deklarasi impor untuk membuat fungsi dalam modul tersebut tersedia untuk digunakan tanpa perlu memenuhi syarat oleh nama modul. Dalam contoh yang baru saja disebutkan, pengguna modul dalam hal ini dapat membuka modul dengan menggunakan deklarasi impor open Module1
dan kemudian merujuk ke function1
secara langsung.
module Module1 =
let function1 x = x + 1.0
module Module2 =
let function2 x =
Module1.function1 x
open Module1
let function3 x =
function1 x
Beberapa modul memiliki atribut RequireQualifiedAccess, yang berarti bahwa fungsi yang diekspos harus memenuhi syarat dengan nama modul. Misalnya, modul Daftar F# memiliki atribut ini.
Untuk informasi selengkapnya tentang modul dan kontrol akses, lihat Modul dan Access Control.