DISUSUN OLEH :
Muhammad Dimas Sholikul Hadi (10122880)
Muhammad Haidar Siddiq (10122920)
UNIVERSITAS GUNADARMA
FAKULTAS ILMU KOMPUTER
TEKNOLOGI INFORMASI
2022/2023
LEMBAR PENGESAHAN
KOMISI PEMBIMBING
NO NAMA KEDUDUKAN
1. Nama Pembimbing Ketua
2. Nama Penguji 1 Anggota
3. Nama Penguji 2 Anggota
Tanggal Sidang : Tgl/bln/thn*
PANITIA UJIAN
NO NAMA KEDUDUKAN
1. Dr. Ravi Ahmad Salim Ketua
2. Prof. Dr. Wahyudi Priyono Sekretaris
3. Nama Pembimbing Anggota
4. Nama Penguji 1 Anggota
5. Nama Penguji 2 Anggota
Tanggal Lulus : Tgl/bln/thn*
Mengetahui,
ii
KATA PENGANTAR
Dengan menyebut nama Allah SWT yang Maha Pengasih lagi Maha Panyayang, kami
panjatkan puja dan puji syukur atas kehadirat-Nya, yang telah melimpahkan rahmat, hidayah,
dan hidayah-Nya kepada kami, sehingga kami dapat menyelesaikan Tugas Mata kuliah
Pemrograman Berorientasi Objek
Tugas Mata Kuliah Pemrograman Beorientasi Objek ini telah kami susun dengan
semaksimal mungkin dan mendapatkan bantuan dari berbagai pihak sehingga dapat
memperlancar pembuatan makalah ini. Untuk itu kami menyampaikan banyak terima kasih
kepada semua pihak yang telah berkontribusi dalam pembuatan makalah ini.
Terlepas dari semua itu, kami menyadari sepenuhnya bahwa masih ada kekurangan baik
dari segi susunan kalimat maupun tata bahasanya. Oleh karena itu dengan tangan terbuka kami
menerima segala saran dan kritik dari pembaca agar kami dapat memperbaiki makalah ilmiah
ini.
Akhir kata kami berharap semoga Tugas ini dapat memberikan manfaat maupun inpirasi
terhadap pembaca.
Penyusun
iii
DAFTAR ISI
COVER ........................................................................................................................................... i
KATA PENGANTAR................................................................................................................... ii
DAFTAR ISI................................................................................................................................. iii
BAB I PENDAHULUAN.............................................................................................................. 1
A. Latar Belakang ..................................................................................................................... 1
B. Rumusan Masalah/Pembahasan ........................................................................................... 2
C. Tujuan .................................................................................................................................. 2
BAB II PEMBAHASAN ............................................................................................................... 3
1. Pemrograman Fungsional .................................................................................................... 3
2. Kelebihan dan Kekurangan .................................................................................................. 4
3. Macam – Macam Bahasa Pemrograman yang Mendukung ................................................ 5
4. Konsep Pemograman F# ...................................................................................................... 6
5. Contoh yang Menunjukan Inti Konsep Pemrograman F# ................................................... 6
BAB III PENUTUPAN ............................................................................................................... 10
A. Kesimpulan ......................................................................................................................... 10
B. Daftar Pustaka/Referensi ................................................................................................... 10
iv
BAB I
PENDAHULUAN
A. Latar Belakang
Menurut Codepolitan.com, Pemerograman Fungsional, mereka selalu
menyebutkan kata kunci 'fungsional' yang sering membingungkan. Mereka selalu
menyebutkan fitur yang disuguhkan pemrograman fungsional seperti data yang tidak
berubah, fungsi first-class dan optimisasi tail call. Mereka juga selalu menyebutkan
teknik yang selalu digunakan dalam pemrograman fungsional seperti mapping,
reducing, pipelining, recursing, currying dan fungsi level atas lainnya. Mereka juga
selalu bilang keuntungan pemrograman fungsional seperti parallelization, lazy
evaluation, dan determinism.
Namun jangan sampai terpaku pada istilah tersebut, pemrograman fungsional
mempunyai karakterisitik yang penting yaitu 'The absence of side effects'. Artinya
bahwa pemrograman fungsional tidak bergantung pada data yang diluar fungsi, dan
tidak merubah data yang ada di luar fungsi.
Sebagai contoh perbedaan fungsi yang termasuk ke dalam pemrograman
fungsional dan bukan diimplementasikan dalam bahasa pemrograman Python sebagai
berikut:
Tidak fungsional
a=0
def increment():
global a
a += 1
Fungsional
def increment(a):
return a + 1
1
2
B. Rumusan Masalah/Pembahasan
Dengan memperhatikan latar belakang tersebut, agar dalam penulisan ini saya ke
memperoleh hasil yang diinginkan, maka saya sebagai penyusun mengemukakan beberapa
rumusan masalah. Rumusan masalah itu adalah:
1. Mengdefinisikan Pengertian Pemerograman Fungsional
2. Kelebihan dan Kekurangan Pemrograman Fungsional
3. Macam – Macam Bahasa Pemrograman yang Mendukung
4. Konsep Pemrograman Fungsional di F#
5. Contoh – Contoh yang Menunjukan Inti Konsep F#
C. Tujuan
Tujuan dari penyusunan makalah ini anatara lain:
1. Memahami bahwa pemrograman fungsional menggunakan fungsi atau subprogram yang
bisa digunakan kapan saja bila dibutuhkan.
2. Memahami pengertian pemrograman fungsional
3. Mengetahui tujuan dan kelebihan programan fungsional
4. Mengerti macam – macam Bahasa pemrograman
5. Memahami konsep pemrograman fungsional di F#
6. Mmebuat Konsep inti F#
3
BAB II
PEMBAHASAN
1. Pemrograman Fungsional
A. Pengenalan
Pemrograman fungsional biasanya menggunakan fungsi atau subprogram yang bisa
digunakan kapan saja bila dibutuhkan. Setiap fungsi memiliki algoritma yang dibuat untuk
menyelesaikan suatu permasalahan dan dapat digunakan ulang kapan saja di mana saja jika
dibutuhkan.
Namun kode fungsional (kode program menggunakan paradigma pemograman
fungsional) cenderung lebih ringkas, lebih mudah diprediksi, dan lebih mudah untuk diuji
daripada berorientasi objek - tetapi jika Anda tidak terbiasa dengan itu dan pola yang terkait
dengannya, kode fungsional juga bisa tampak jauh lebih mudah.
Mungkin salah satu hal yang menarik yang lain adalah perbedaan dengan paradigma
pemograman berorientasi objek yaitu menanggap sebuah perangkat lunak terdiri dari
objek-objek terkait dan perilaku objek tersebut. Tentunya masing-masing paradigma
pemograman memiliki kelebihan dan kekurangan masing-masing. Tidak ada satu paradigma
yang jauh lebih hebat dari paradigma yang lain. Tergantung dengan domain masalah dan
kebutuhan yang dihadapi
4
5
Webserver di windows bisa dibuat dengan berbagai macam cara. Ada yang
menggunakan PHP secara manual dengan web server bawaan PHP; ada yang
menggunakan WSL lalu menginstal LAMPP Stack; ada yang menggunakan XAMPP;
ada yang menggunakan Docker, dan lain sebgainya.
• JavaScript
JavaScript adalah bahasa pemrograman yang banyak digunakan dalam
pengembangan website, aplikasi, dan game.
Dengan menguasai bahasa pemrograman ini, Anda bisa membuat tampilan website
yang menarik atau mengembangkan game online berbasis web yang populer.
• Ruby
Ruby adalah bahasa pemrograman berbasis skrip yang berorientasi pada objek. Ruby
bersifat open source, biasanya digunakan untuk membangun dan mengembangkan
aplikasi web yang sederhana dan cepat.
• Pascal
Pascal adalah salah satu bahasa pemrograman komputer yang sering dipakai untuk
belajar algoritma dan pemrograman bagi pemula terutama di bidang akademis.
Saat ini pascal juga masih menjadi bahasa pemrograman standar untuk lomba
Olimpiade Sains Nasional (OSN) bidang komputer. Selain itu, mayoritas jurusan
komputer di Indonesia juga menggunakan bahasa Pascal di tahun pertama bangku
kuliah.
• C/C++
C++ adalah bahasa pemrograman komputer yang dibuat oleh Bjarne Stroustrup,
yang merupakan perkembangan dari bahasa C dikembangkan di Bell Labs (Dennis
Ritchie). Pada awal tahun 1970-an, bahasa itu merupakan peningkatan dari bahasa
sebelumnya, yaitu B.
4. Konsep Pemograman F#
A. Pengantar Konsep Pemrograman Fungsional di F#
Pemrograman fungsional adalah gaya pemrograman yang menekankan penggunaan
fungsi dan data yang tidak dapat diubah. Pemrograman fungsional yang diketik adalah
ketika pemrograman fungsional dikombinasikan dengan jenis statis, seperti dengan F#.
Secara umum, konsep berikut ditekankan dalam pemrograman fungsional:
• F#
let addOne x = x + 1
Jenis tanda tangannya adalah sebagai berikut:
• F#
val addOne: x:int -> int
Tanda tangan dapat dibaca sebagai, "addOne menerima int bernama x dan akan
menghasilkan int". Secara lebih formal, addOne memetakan nilai dari set bilangan bulat ke
kumpulan bilangan bulat. Token -> menandakan pemetaan ini. Di F#, Anda biasanya dapat
melihat tanda tangan fungsi untuk memahami kegunaannya.
Jadi, mengapa tanda tangan itu penting? Dalam pemrograman fungsional yang diketik,
implementasi fungsi sering kali kurang penting daripada tanda tangan jenis aktual! Fakta
bahwa addOne menambahkan nilai 1 ke bilangan bulat menarik pada durasi, tetapi ketika Anda
membangun program, fakta bahwa hal itu menerima dan mengembalikan int adalah apa yang
menginformasikan bagaimana Anda akan benar-benar menggunakan fungsi ini. Selain itu,
setelah Anda menggunakan fungsi ini dengan benar (sehubungan dengan jenis tanda
tangannya), mendiagnosis masalah apa pun dapat dilakukan hanya di dalam isi fungsi addOne.
Ini adalah pendorong di balik pemrograman fungsional yang diketik.
B. Expressions
Ekspresi adalah konstruksi yang mengevaluasi nilai. Berbeda dengan pernyataan, yang
melakukan tindakan, ekspresi dapat dianggap melakukan tindakan yang memberikan kembali
nilai. Ekspresi hampir selalu digunakan dalam pemrograman fungsional dari pada pernyataan.
Pertimbangkan fungsi sebelumnya, addOne. Isi dari addOne ekspresi adalah:
• F#
// 'x + 1' is an expression!
let addOne x = x + 1
Ini adalah hasil dari ekspresi ini yang menentukan jenis hasil dari fungsiaddOne.
Misalnya, ekspresi yang membentuk fungsi ini dapat diubah menjadi jenis yang berbeda,
seperti string:
• F#
let addOne x = x.ToString() + "1"
Tanda tangan fungsinya sekarang:
• F#
val addOne: x:'a -> string
Karena semua jenis dalam F# dapat memiliki ToString() yang dipanggil, jenis x telah
dibuat generik (disebut Generalisasi Otomatis), dan jenis yang dihasilkan
adalah string.
Ekspresi bukan hanya isi fungsi. Anda dapat memiliki ekspresi yang menghasilkan nilai
yang Anda gunakan di tempat lain. Ekspresi yang umum adalah if:
• F#
// Checks if 'x' is odd by using the mod operator
let isOdd x = x % 2 <> 0
let addOneIfOdd input =
let result =
if isOdd input then
input + 1
else
input
result
7
C. Fungsi Pure
Seperti disebutkan sebelumnya, fungsi pure adalah fungsi yang:
Saat menulis fungsi pure, fungsi harus hanya bergantung pada argumennya dan tidak
melakukan tindakan apa pun yang menghasilkan efek samping.
Berikut adalah contoh fungsi non-pure karena tergantung pada status global yang
dapat diubah:
• F#
let mutable value = 1
let addOneToValue x = x + value
Fungsi addOneToValue ini jelas tidak pure, karena value dapat diubah kapan saja
untuk memiliki nilai yang berbeda dari 1. Pola ketergantungan pada nilai global ini
harus dihindari dalam pemrograman fungsional.
Berikut adalah contoh lain dari fungsi yang tidak pure, karena melakukan efek samping:
• F#
let addOneToValue x =
printfn $"x is %d{x}"
x+1
Meskipun fungsi ini tidak bergantung pada nilai global, fungsi ini menulis nilai x ke
output program. Meskipun tidak ada yang salah secara inheren dengan melakukan
ini, ini berarti bahwa fungsinya tidak pure. Jika bagian lain dari program Anda
bergantung pada sesuatu di luar program, seperti buffer output, maka memanggil
fungsi ini dapat memengaruhi bagian lain itu dari program Anda.
8
D. Ketetapan
Terakhir, salah satu konsep paling mendasar dari pemrograman fungsional yang diketik
adalah ketetapan. Dalam F#, semua nilai tidak dapat diubah secara default. Artinya nilai ini
tidak dapat dimutasi di tempat kecuali Anda secara eksplisit menandainya sebagai dapat
diubah.
Dalam praktiknya, bekerja dengan nilai yang tidak dapat diubah berarti Anda
mengubah pendekatan Anda untuk pemrograman dari, "Saya perlu mengubah sesuatu",
menjadi "Saya perlu menghasilkan nilai baru".
Misalnya, menambahkan 1 ke nilai berarti menghasilkan nilai baru, bukan memutasi
yang sudah ada:
• F#
let value = 1
let secondValue = value + 1
Dalam F#, kode berikut tidak memutasi fungsi value; sebaliknya, kode ini melakukan
pemeriksaan kesetaraan:
• F#
let value = 1
value = value + 1 // Produces a 'bool' value!
9
BAB III
PENUTUPAN
A. Kesimpulan
B. Daftar Pustaka/Referensi
Permana, Y. (2016, May 11). Mengenal Pemrograman Fungsional. Fungsional itu apa sih.
Thabroni, G. (2022, Februari 27). Paradigma Pemrograman (OOP, Fungsional, Deklaratif, dsb).
Pemrograman Fungsional.
Phillip Carter, G. W. (2022, September 22). Tutorial Pengantar Konsep Pemrograman Fungsional
di F#. Pengantar Konsep Pemrograman Fungsional di F#.
10