Jelajahi fungsi
Biasanya, Anda berada dalam situasi di mana kode Anda terlihat berulang. Ini melakukan hal yang sama di banyak tempat, atau hanya ada perbedaan kecil. Dalam situasi seperti ini, pikirkan tentang cara membuat kode yang dapat digunakan kembali. Cara untuk mengatasi situasi ini adalah dengan mengekstrak ekspresi dan membuat satu atau lebih fungsi. Fungsi adalah blok bangunan mendasar dalam banyak bahasa pemrograman, dan F# tidak berbeda.
Sebuah Fungsi
Fungsi adalah referensi bernama dengan bagian yang terdiri dari satu atau lebih pernyataan. Fungsi juga dapat memiliki parameter. Sebuah fungsi dimulai dengan kata kunci let dan nama fungsinya. Selanjutnya, terdapat operator penugasan, dan badan fungsi berada di sebelah kanan operator ini.
Berikut sintaks dari suatu fungsi:
let <function name> <parameters> = <function body>
Contoh fungsi yang sebenarnya, seperti yang ditunjukkan dengan sintaks contoh sebelumnya, terlihat seperti ini:
let add a b = a + b
Dalam contoh ini, nama fungsinya adalah add dan parameternya adalah a dan b. Badan fungsi menambahkan dua parameter bersama-sama, a+b, dan mengembalikan hasilnya.
Mengembalikan nilai
Seperti yang Anda lihat pada contoh pertama, tidak ada kata kunci return untuk menyatakan apa yang dikembalikan. Pada F#, informasi di baris terakhir dari suatu fungsi merupakan sesuatu yang dikembalikan. Pertimbangkan fungsi multiline ini:
let addAndMultiply a b c =
let sum = a + b
let product = sum * c
product
Dengan menempatkan product pada baris terakhir, akan memberi tahu Anda apa yang dikembalikan. Jadi bagaimana Anda memanggil fungsi seperti ini?
Panggil fungsi
Untuk memanggil, atau melibatkan, suatu fungsi, gunakan nama fungsi dan tambahkan parameter apa saja yang ingin Anda gunakan, dipisahkan oleh karakter spasi. Misalnya, untuk memanggil fungsi addAndMultiply(), masukkan kode berikut:
addAndMultiply 2 3 3 // 15
Untuk melihat hasil fungsi, Anda dapat menetapkannya ke variabel atau mencetaknya secara langsung, seperti:
let sum = addAndMultiply 2 3 3
printfn "%i" sum
// OR
printfn "%i" (addAndMultiply 2 3 3)
Tipe yang disimpulkan
Ikuti kode berikut:
let add a b = a + b
let sum = add 2 2
let concat = add "hello" "world" // will give compilation error
Kode ini gagal pada baris terakhir dengan pesan berikut:
error FS0001: This expression was expected to have type
'int'
but here has type
'string'
Alasan kegagalannya adalah karena F# sudah menentukan jenis parameter apa yang harus digunakan, dan memutuskan bilangan bulat. Alasan memutuskan bilangan bulat adalah karena informasi di baris kedua, let sum = add 2 2. Fungsi add() digunakan dengan cara yang menyatakan bahwa jenis parameter pasti bilangan bulat.
Jika baris kedua tidak ada, kode Anda berfungsi:
let add a b = a + b
// let sum = add 2 2
let concat = add "hello" "world" // will work
Pengumpul melihat bahwa penggunaan pertama dari fungsi dibuat dengan string dan menyimpulkan bahwa jenis parameter adalah string. Jadi, konteks dan penggunaan pertama menyimpulkan jenisnya.
Jenis eksplisit
Ada situasi di mana Anda ingin menjadi eksplisit, baik tentang jenis parameter apa yang harus diambil dan apa yang dikembalikan oleh fungsi. Ini membantu keterbacaan agar lebih spesifik, meskipun kompilator kemungkinan besar tidak membutuhkannya.
Ambil fungsi berikut, misalnya:
let convert a =
int a
Untuk menambahkan jenis ke dalamnya, Anda menambahkan :<type>, seperti:
let convert (a:string) =
int a
Parameter sekarang memiliki jenis string melalui kode let convert (a:string). Anda sekarang dapat menjadi lebih eksplisit, dengan menambahkan jenis pengembalian. Untuk melakukannya, tambahkan :<type> lainnya tepat setelah parameter Anda:
let convert (a:string) :int =
int a
Sekarang tanda kurung mengapit parameter, seperti yang ditunjukkan dalam (a:string). Jenis pengembalian adalah anotasi terakhir :<type> yang terjadi, yaitu :int. F# cukup pintar untuk mengetahui sebagian besar skenario, tetapi terkadang Anda perlu membantu kode dengan menjadi lebih eksplisit. Manfaat lain untuk menambahkan jenis adalah memudahkan pengembang lain untuk mencari tahu apa yang terjadi.