Functional Programming vs Object Oriented Progamming: Mana yang Lebih Keren?
Tags: programming
Published: 2024-06-03 04:34:40


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1wkiwzxpebvikv5jqd74.png)


Halo, temen-temen! Kali ini kita bakal bahas dua cara keren buat ngoding: Pemrograman Fungsional / _Functional Programming_ (FP) dan Pemrograman Berorientasi Objek / _Object Oriented Programming_ (OOP). Yuk, kita lihat mana yang lebih cocok buat temen-temen!

## _Functional Programming_ (FP)

### Apa Itu FP?
- FP itu kayak bikin rumus matematika, bro. Nggak ada perubahan data mendadak, semua data tuh kayak patung, nggak bisa diubah.
- Di FP, fungsi tuh kayak raja. Lo bisa simpen fungsi di variabel, kirim sebagai argumen, atau balikin dari fungsi lain. Asik, kan?

### Ciri-Ciri Utama FP:
1. **Immutability:**
   - Data nggak bisa diubah-ubah. Jadi lebih aman dari bug yang bikin pusing.
2. **Pure Functions:**
   - Fungsi murni nggak punya efek samping. Jadi outputnya cuma tergantung input.
3. **Higher-Order Functions:**
   - Fungsi bisa nerima fungsi lain atau balikin fungsi. Misalnya `map`, `filter`, `reduce`.
4. **Recursion:**
   - Lebih sering pake rekursi daripada loop.
5. **Lazy Evaluation:**
   - Hitung cuma kalo bener-bener butuh. Hemat tenaga, bro.

### Contoh Bahasa FP:
- Go, Elixir

### Kelebihan FP:
- Kode lebih gampang dites dan di-debug.
- Lebih gampang buat paralel dan concurrent programming.
- Mengurangi risiko kesalahan karena data nggak bisa diubah.

### Kekurangan FP:
- Agak susah dipelajari buat yang baru mulai.
- Nggak semua masalah cocok diselesaikan dengan FP.
- Performanya bisa lambat kalo nggak dioptimalkan.

## _Object Oriented Programming_ (OOP)

### Apa Itu OOP?
- OOP itu fokus ke objek yang gabungin data dan aksi. Kayak bikin dunia mini di dalam program temen-temen.
- Kode diatur dalam _object_ dan _class_. Mirip kayak bikin blueprint rumah.

### Ciri-Ciri Utama OOP:
1. **Encapsulation:**
   - Data dalam _object_ disembunyiin, cuma bisa diakses lewat _method/function_. Bikin lebih aman dan rapi.
2. **Inheritance:**
   - Kelas bisa nurunin sifat ke _class_ lain. Mirip kayak warisan keluarga, bro.
3. **Polymorphism:**
   - Metode yang sama bisa punya implementasi beda. Bikin kode lebih fleksibel.
4. **Abstraction:**
   - Fokus ke yang penting aja, detail nggak perlu ditunjukin. Bikin lebih gampang diatur.

### Contoh Bahasa OOP:
- Java, C++, Python, Ruby, C#.

### Kelebihan OOP:
- Mudah dimengerti dan diimplementasiin karena mirip dunia nyata.
- Kode lebih modular dan bisa dipake ulang.
- Gampang dikembangin dan dipelihara lewat _inheritance_ dan _polymorphism_.

### Kekurangan OOP:
- Bisa berlebihan buat masalah kecil.
- Struktur warisan yang dalam bisa bikin kode susah diubah.
- Banyak kode template yang harus ditulis.

## Perbandingan FP dan OOP

| Aspek | Pemrograman Fungsional (FP) | Pemrograman Berorientasi Objek (OOP) |
|-------|------------------------------|--------------------------------------|
| **Fokus Utama** | Fungsi dan komposisi fungsi | Objek dan interaksi antar objek |
| **Data** | Nggak bisa diubah | Bisa diubah |
| **Efek Samping** | Dihindari | Boleh |
| **Pendekatan** | Deklaratif | Imperatif |
| **Penggunaan Ulang Kode** | Fungsi murni dan higher-order functions | Inheritance dan polymorphism |
| **Kesederhanaan Pengujian** | Lebih mudah | Butuh pengaturan state yang tepat |

## Mana yang Lebih Keren?

Nggak ada jawaban pasti, bro. Semua tergantung:
- **Jenis proyek:** Kalo banyak state dan interaksi antar objek, OOP lebih cocok. Tapi kalo transformasi data, FP lebih mantap.
- **Tim dan skill:** Tim yang udah biasa pake salah satu cara bakal lebih produktif pake cara itu.
- **Performa:** Tergantung kebutuhan proyek temen-temen.

## Kesimpulan

Masing-masing punya kelebihan dan kekurangan. Kadang, temen-temen perlu gabungin prinsip dari kedua paradigma buat bikin solusi yang fleksibel dan scalable. Jadi, pilih yang paling cocok buat proyek temen-temen dan tim temen-temen!

---

Semoga penjelasan ini bisa bikin temen-temen lebih paham dan bisa milih yang paling cocok buat temen-temen! Jangan lupa ngoding itu diketik jangan dipikir! Sampai jumpa di artikel yang lainnya!!