Bagikan melalui


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.

Lihat juga