Xi Nian Kuai Le! Gong Xi Fa Cai!
Nah. Ini posting pertama saya dalam Bahasa Indonesia. Ini adalah permintaan beberapa orang teman supaya tulisan saya lebih mudah dicerna. Kali ini saya mau membahas materi yang sederhana dulu, yaitu tentang dasar-dasar nilai dan fungsi pada F#.
Di dalam bahasa F#, fungsi dan nilai sebenarnya tidak terbedakan. Hal ini disebabkan bagi F# fungsi merupakan nilai. Untuk lebih jelasnya, perhatikan kesamaan sintaks pada kode berikut :
#light
let
angka = 20
let
jumlah a b = a + b
Dari contoh di atas terlihat bahwa nilai dan fungsi mendapat perlakuan yang sama. Identifier angka mendapat nilai 20 dan demikian pula dengan fungsi jumlah secara otomatis mendapatkan nilai dari a + b. Karena fungsi sama dengan nilai, maka hal ini memungkinkan kita : membuat suatu fungsi yang menerima parameter berupa fungsi lain, membuat fungsi yang return value-nya berupa fungsi juga, memasukkan fungsi di dalam struktur data, dan lain-lain.
Hal lain yang perlu dicatat adalah pada pendeklarasian suatu fungsi di F# anda tidak perlu mendeklarasikan return layaknya bahasa pemrograman imperatif umumnya.
Fitur lain dari F# adalah kita tidak harus memberikan seluruh argumen sekaligus. Contohnya :
#light
let
hitung a b = a + b
let
tambahSatu = hitung 1
let
hasil = tambahSatu 10
Meskipun nampak jelas bahwa fungsi hitung meminta dua argumen, namun kita bisa memberi nilai tidak secara sekaligus. Pada waktu saya mendeklarasikan tambahSatu, maka nilai 1 akan mengisi parameter pertama atau a. Pada saat itu, fungsi akan menunggu nilai berikutnya untuk mengisi parameter kedua. Ini disebut currying, diambil dari nama Haskell Curry.
Namun bagaimana jika saya mengharuskan dua argumen dipenuhi sekaligus? F# mengenal suatu konsep yang disebut dengan tuple. Tuple mungkin dapat didefinisikan sebagai gabungan beberapa data dalam satu paket. Mirip anonymous type pada C# namun tanpa perlu mendeklarasikan ID variabelnya. Contoh pendeklarasian-nya :
#light
let
koordinat (a,b) = a + b
let hasil = koordinat (2,3)
Dengan demikian pemanggilan fungsi koordinat harus diikuti dengan nilai tuple (a,b). Suatu tuple dapat menampung berbagai data yang berbeda tipe. Namun tuple tidak mampu menerima nilai dari tuple dengan struktur yang berbeda. Misalnya tuple (a,b) tidak dapat menerima tuple yang bernilai (1,4,"Halo",5) karena struktur-nya berbeda.
Itu saja sedikit gambaran sederhana tentang nilai dan fungsi di dalam F#.